1. Date d=today //通过复制函数初始化对象
a. Date d; d=today //通过
赋值运算符初始化
//对可互相转化的对象:可通过转换构造函数->赋值运算符实现赋值
2. 常量成员对象,常量成员函数,常量对象
3. this:成员函数有this隐式引用;常量成员函数有常量this引用,所以不能修改
4. const_cast: 把const对象转为非const对象
5. mutable:标记为一定可修改,即使是常量对象的成员对象
6. inline函数:在类内部定义的单数都是inline函数,所以尽量定义小函数
7. C++ 初始化类的常量数据成员、静态数据成员、常量静态数据成员
1、const成员:只能在构造函数后的初始化列表中初始化
2、static成员:初始化在类外,且不加static修饰
3、const static成员:类只有唯一一份拷贝,且数值不能改变。因此,可以在类中声明处初始化,也可以像static在类外初始化
-
class base
-
{
-
public:
-
base(int x=8):a(x){};
-
const int a;
-
static int b;
-
const static int c=9;
-
};
-
int base::b=9;
-
8. 类成员对象:初始化时:先类成员对象,后类对象;析构时顺序相反
9. 成员赋值:初始化赋值优先于构造函数中赋值,因为可以少构造一个空对象
10. 如果一个类有非静态成员是:a)引用,b) const,c)没有复制复制的用户定义类型,则不能生成默认的复制构造函数
11. 静态局部变量,第一次代码被调用时赋值有效,之后赋值语句无效,在程序结束时才销毁
12. 临时对象——特别注意,跟c#中完全不一样
a. 在完整表达式结束后,被释放
b. 错误示范
void f(string& s1, string& s2, string& s3)
{
const char* cs=(s1+s2).c_str() //错误,临时对象(s1+s2)在结束时被销毁
if (strlen(cs=(s2+s3).c_str()<8&&cs[0]=='a') //正常,s2+s3对象在完整表达式结束后才会被销毁
{ us cs } //错误,cs指向的对象已经被销毁
}
——最好是显示创建临时对象
阅读(523) | 评论(0) | 转发(0) |