2012-02-24
1、 结构体的默认访问权限是public,类是private
∴ class myClass{
void setValue(int value);} //不声明,则为private权限
2、 类声明于myclass.h中,类实现于myclass.cpp中(include”myclass.h”)
void myclass::setValue(int value){…}
3、 快速string ,double转换
#include<sstream>
string doubleToString(double value)
{ostringstream ostr; ostr<<value; return ostr.str() }
double stringToDouble(string instring)
{double temp; istringstream istr(instring); istr>>temp; return temp;}
4、 this指针
(1) this.value=value;
(2) 通过this可以从对象的方法中调用一个函数或方法,此函数的参数为对象指针
eg. void printall(myclass *p){…;}
若在myclass类的一个方法中调用printall,可用printall(this)
5、创建对象
创建对象 |
无构造函数时 |
有构造函数时 |
在栈上 |
myclass test; test.setValue(6); |
若包含构造函数,只可在初始化时创建 myclass test(2)//唯一正确 |
在堆上 |
myclass *temp=new myclass(); test->setValue(6); delete test; |
myclass *test; test=new myclass(2); |
6、初始化列表允许在创建数据成员的同时完成初始化
myclass::myclass():mValue(10),mString(“”)//构造函数处初始化
{
}//数据成员按照类定义的顺序初始化,而非在本处的顺序,另外,const数据成员、引用数据成员、没有默认构造函数的对象数据成员必须在此处初始化
7 c++中函数默认为按值传递,所以函数参数只是变量的一个副本,而不是变量本身
例如test.setString(name);
void myclass::setString(string input){…}//会调用input的构造函数并撤销input,而name一直未变
∴按const引用传递可以有效提高效率,避免创造副本及调用构造、析构函数
8、
如果定义了 |
可以创建 |
无构造函数 |
myclass a; myclass b(a); |
仅一个0参构造函数 |
myclass a; myclass b(a); |
仅一个复制构造函数 |
不能创建对象 |
仅一个单参或多参构造函数 |
myclass a(5); myclass b(a); |
1个0参,1个单参或多参 |
myclass a; myclass b(5); myclass c(b); |
9、 栈中的对象按照声明的逆序撤销(一个代码块内),堆中的对象不会自动撤销,须用delete调用析构函数
10、 复制只有初始化时才出现,否则叫赋值
myclass test2=test1; //复制,调用复制构造函数
myclass test3;
test3=test; //赋值
myclass::myclass(myclass test2):value(myclass2.value){}
与myclass::myclass(myclass test2)
{value=test2.value;}区别
前者是复制,后者是赋值;在初始化列表中不包含某数据成员时,编译器对其完成默认初始化。所以const型只可用前者,因为初始化后不可更改。
11、 c++中二维数组arr[m][n]
int **arr;
arr= new int *[m];
for(i=0;i<m;i++) arr[m]=new int [n];
12、 只要类会动态分配内存,就要编写析构函数、复制构造函数和赋值运算符。默认的复制构造函数和赋值运算符都是浅复制,会出问题