default构造函数:默认构造函数
是一个可被调用而不带任何实参者
要不没有参数,要不每个参数都有缺省值
有三个:空构造,复制构造,右值复制构造
explicit修饰:指定这个构造器只能被明确的调用,使用,不能作为类型转换操作符被隐含的使用,防止隐式转换
如:1 class Test1
{
public:
Test1(int n)
{ num=n;}//普通构造函数
privata:
int num;
};
2 class Test2
{
public:
explicit Test2(int n)
{ num=n;}//显式构造函数
privata:
int num;
};
int main()
{ Test1 t1=12;//隐式调用其构造函数,成功
Test2 t2=12;//编译错误,不能隐式调用其构造函数
Test2 t2(12);//显式调用成功
return 0;
}
copy assignment 复制赋值运算符(原来有初对象)
copy构造函数(原来无初对象,现才建立)
实例代码:class Weight{
public:
Weight();//default构造函数
Weight(const Weight& a);//copy构造函数
Weight& operator=(const Weight &a);//copy assignment操作符
...
};
Weight w1;//调用default构造函数
Weight w2(w1);调用copy构造函数
w1=w2;//调用copy assignment操作符
*当看到赋值符号时小心,因为=也可调用copy构造函数(隐式转换)如Weight w3=w2;