class Z
{
public:
Z(){cout<<"Z default constructor"<<endl;}
Z(int n){cout<<"Z int conructor, and int ="<<n<<endl;}//这是类型转换的赋值函数吗
};
class A
{
public:
A(){y=1;cout<<"A constructor"<<endl;}
Z x;
Z y;
};
...全文
17113打赏收藏
赋值函数
class Z { public: Z(){cout<<"Z default constructor"<<endl;} Z(int n){cout<<"Z int conructor, and int ="<<n<<endl;}//这是类型转换的赋值函数吗 }; class A { public: A(){y=1;cout<<"A constructor"<<endl;} Z x; Z y; };
那我给你解释了吧,其实我建议你看是希望你可以更深入了解拷贝的整个过程及其什么是拷贝和赋值的区别,好了不废话了,回到正题:
class Z
{
public:
Z(){cout<<"Z default constructor"<<endl;}
Z(int n){cout<<"Z int conructor, and int ="<<n<<endl;}//这个是赋值还是拷贝构造函数呢?
这里既不是拷贝也不是赋值,为什么呢?因为这是一个重载的构造函数,你在外部实例化时所需要带上的默认参数
};
class A
{
public:
A(){y=1;cout<<"A constructor"<<endl;}// 这里调用了 Z(int n)作为赋值吧?
都不是
Z x;
Z y;
};
class B:public A
{
public:
B():n(3),m(2){cout<<"B construcotr"<<endl;}// 这里也调用了 Z(int n) 作为拷贝构造
不是什么构造拷贝赋值
Z m;
Z n;
};
注意:
拷贝:是不带有’=‘符号的复制,例如,Obj b,Obj a(b)这才是拷贝
赋值:带有=符号,例如,Obj b,Obj a; a=b,这才是赋值
class Z
{
public:
Z(){cout<<"Z default constructor"<<endl;}
Z(int n){cout<<"Z int conructor, and int ="<<n<<endl;}//这个是赋值还是拷贝构造函数呢?
};
class A
{
public:
A(){y=1;cout<<"A constructor"<<endl;}// 这里调用了 Z(int n)作为赋值吧?
Z x;
Z y;
};
class B:public A
{
public:
B():n(3),m(2){cout<<"B construcotr"<<endl;}// 这里也调用了 Z(int n) 作为拷贝构造
Z m;
Z n;
};