1 Const
作用: Const修饰的变量不能被改变。
应用: Const可以修饰变量、函数参数、函数返回值、成员函数、与指针配合、与引用配合。
- 传递参数或者函数返回值时,如果不是传递或返回指针或者引用,也用不着使用const,因为形参是对实参的拷贝。
- 修饰指针:
const char* const p;
//第一个const是保持p所指向的内存空间的内容不变,第二个const是指针的指向不变。
- 修饰引用
Complex& a;
//其等价于Complex* const a,相当于常指针,而取地址&操作以及*操作是C++编译器自己做了
Const Complex& a;
//在传递引用时,一般需要加上Const,保持传递的变量不变,除非是要对变量进行修改
- 修饰成员函数this指针
void OpVar(int a,int b) const //一般写在后边
{
this->a = 100;
this->b = 100;
}
//此函数为成员函数,默认传递this指针,无法显式的修饰this指针,因此放在花括号之前来修饰this指针,不能让this指针在花括号内被修改。
未完待续…
2 匿名对象
- 构造函数: 可直接使用构造函数来创建匿名对象
class Test
{
Test(){}
};
Test();//此处创建的是一个匿名对象,如果不用于初始化对象,那么其生命周期只有这一行
注意:有时候,会想在一个构造函数中调用另一个构造函数,但是这种操作恰好是创建了一个匿名对象,调用是不成功的。
- **函数返回:**函数返回一个自定义对象时,由于函数结束后,局部变量就要被析构掉,因此创建一个匿名对象用于承接返回的对象。但是要看怎么接。
def build()
{
Test t();
return t;
}
Test t1 = build();//此处的匿名对象直接转正,不再调用拷贝构造函数
Test t2();
t2 = build();//此处相当于等号赋值,需要调用拷贝构造函数
未完待续…
3 浅拷贝
- 默认拷贝构造函数: 若没有定义拷贝构造函数,会调用默认拷贝构造函数,此时如果对象中存在指针,此时实现的是浅拷贝(两个对象的指针成员变量p会指向同一块内存空间),当进行析构的时候就会释放两次,报错。
- 等号赋值=操作: 直接的等号赋值操作使用的也是浅拷贝,此时就需要重载等号操作符。
Test t1();
Test t2();
t2 = t1;//此处的等号操作
//进行等号操作赋值时,如果对象中有指针,1)要给新对象分配内存空间,并将内容拷贝2)析构时,释放指针,并设置为NULL
未完待续…