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; //调用赋值运算符 }