Effective c++ 学习笔记 (一)

1.初始化

自定义对象的初始化由构造函数执行,其中默认构造函数没有参数或者每个参数都有缺省值。explicit关键字禁止非预期的类型转换。

class B{
public:
   explicit B(int x = 0){ }
};
void  doSomething(B obj){
    cout << "function do something!" << endl;
}
int main(){
    doSomething(28);                //执行了隐式转换失败
}

运行结果

error C2664: “doSomething”: 不能将参数从“int”转换为“B“
“copy构造”和“赋值运算符”的区别: 1)定义对象调用构造函数,如:B obj3 = obj是调用copy构造函数; 2)如果没有对象的定义,赋值操作会被调用。

class B{
public:
	 B();                          //default构造函数
	 B(const B &rhs);              //copy构造函数
	 B& operator = (const B &rhs); //赋值运算符
};

int main(){
	B obj;               //调用default构造函数
	B obj2(obj);         //调用copy构造函数
	B obj3 = obj;        //调用copy构造函数
	obj2 = obj3;        //调用赋值运算符
}


猜你喜欢

转载自blog.csdn.net/liyazhen2011/article/details/72895931