C++程序之前需要注意的事项

1.类设计核查表

类设计核查表出自《c++沉思录》

你的类需要构造函数吗

你的数据成员是私有的吗

你的类需要一个无参的构造函数吗

是不是每个构造函数初始化所有的数据成员

类需要析构函数吗

你的类需要复制构造函数吗

你的类需要一个赋值运算符吗

你的赋值运算符能够正确地将对象赋给对象本身吗

你的类需要定义关系操作符吗

删除数组时你记住使用delete[]吗

记得在赋值构造函数和赋值操作的参数类型中加上const修饰符了吗

如果函数有引用参数,他们应该是const引用吗

2.C++中的const和static

const在函数声明之前代表什么

const void testA(int a);//用const修饰这种返回值为void的函数,毫无意义 const int testB(int a){a += a+1; return a;}//按值返回一个编译器内建类型,同样毫无意义 //涉及到左值引用的部分,会在类中单独说。

const在函数声明之后代表什么

//声明一个成员函数为const,则等于告诉编译器该成员函数可以为一个const对象所调用。 //一个没有被声明为const的成员函数被看成是将要修改对象中的数据成员,而且编译器不允许被一个const对象所调用。 //一个成员函数调用const和非const对象是允许的 void className::test()const;//为保证函数不会修改调用对象

const在函数参数声明中代表什么

void testA(const int a){++a;}//按值传递毫无意义,编译器会报错。假使编译器不报错,这个函数执行完后,函数里面的a就会被自动释放 void testB(const int * a){++(*a);}//error,具体原因,参见const在指针的左右各代表着什么 void testC(const int &a){a++;}//error //将参数声明成const,意味着const所修饰的那个参数,在函数中不能被修改.或者你可以根据其修饰的特点,来修改关于这个参数的其他意义。testB中,++(*a)会报错,++a就不会报错,为什么?如果将testB 的参数修改成"int * const a"呢?这次又会是什么来报错呢?有没有觉得,很有趣

const在指针的左右各代表着什么,在引用中呢

//const只有两个地方,一个在'*'号的后面,一个在'*'号的前面 //const修饰指针正指向的对象,const修饰在指针里面存储的地址 int testA = 10; int testB = 30; const int * ptrTestL = &testA ; /*ptrTest 是一个指针,它指向一个const int。testA不是一个const int 类型。也就是说,编译器通过ptrTestL = &testA 这样一个活动,将*ptrTestL限制成了一个const int,但queue没有将自动将testA强行修饰成一个const int。*/ *ptrTestL = testB;//error,编译器不允许这样做。 ptrTestL = &testB;//这样做,改变的是ptrTestL的内容,而不是改变了ptrTestL所指向的内容。 int * const ptrTestR;//error int * const ptrTestR = &testA;// ptrTestR 是一个指针,这个指针指向int的const指针。也就是我们常说的'常指针',声明这样一个指针,编译器要求我们必须为其赋值。 *ptrTestR = testB;//OK ptrTestR = &testB;//error由于ptrTestR 是一个常指针,这里所说的常,指的是指针所指向的testA的地址,对于testA的内容,可以随意修改。 //const 在引用里面的作用和在指针中一样。

const成员变量在什么地方定义

//在一个类中建立一个普通const属性时,不能对其进行直接赋值,赋值必须在构造函数中进行 //在类中定义一个const成员变量,用于顶替掉*'#defien'*

static

//在一个类中,将一个属性声明成static,意味着,不管类的对象被创建多少次,都只有一个实例,在类的外部进行定义,必须定义,否则会出现链接错误 //静态成员函数不能访问一般的数据成员,只能访问静态数据成员,也只能调用其他的静态成员。通常,当前对象的地址(this)是被隐式地传递到被调用函数的,静态函数成员没有this

static const声明的成员变量有什么意义?在何处定义?

static const 成员变量,必须在其定义的地方对其进行初始化。以static const 修饰的成员变量,叫做"编译期间的常量"

写的有很多不足,毕竟水平有限,希望能帮助有需要的人。只是一篇文章而已,不喜勿喷。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/47324e6c21238641836a299afe3bbc67.html