两行C++代码,拷贝构造函数,看不懂

来源:百度知道 编辑:UC知道 时间:2024/05/03 11:57:48
Actor 是一个类

Actor ( const Actor & Actor)

void operator += (Weapon & weapon)

第一行,书上说是一个拷贝构造函数,我没看懂,能帮我讲下吗?
第二行,是一个操作符重载,后面括号里的是引用传值?还是拷贝构造函数啊?

是不是所有的拷贝构造函数都要以const开头?

请指教,谢谢了!
X x1; //调用构造函数
X x2=x1; //调用拷贝构造函数
X x3(x1); //调用拷贝构造函数

前提是X(X&x1); 吗?

拷贝构造函数是构造函数的一种, 它的名称一定要和类名相同.
拷贝构造函数其实就是构造一个同种类型的类的构造函数.如:
Actor a1;//默认构造一个演员
Actor a2(a1);//另一个演员,是a1的副本

拷贝构造函数的参数不一定要必须是const的. 不过既然是拷贝, 就不应该修改引用参数的值, 所以最好声明成const的.

对, 前提就是那个X(X&x1)或者X(const X& x1);

Actor ( const Actor & Actor)拷贝构造函数,函数名为类名,是为防止位拷贝的一种方法。
class X{
X(); //构造函数
X( X & x); // 拷贝构造函数
~X(); //析构函数
};

X x1; //调用构造函数
X x2=x1; //调用拷贝构造函数
X x3(x1); //调用拷贝构造函数

如果没有拷贝构造函数,X x2=x1;是位拷贝,即将x1内容完全考到x2中。
有了拷贝构造函数,就可以自己设计构造函数了

拷贝构造函数首先是构造函数,void operator += (Weapon & weapon)不是构造函数,当然更不是拷贝构造了。里面是引用weapon的引用。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
恩,有拷贝构造函数,就调用,没有就位拷贝。
你可以编程验证,如拷贝构造里加一句cout<<"copy constructor"
构造里加一句cout<<"constructor",就可以知道调用哪个了