C++笔记6

复制构造函数

概念

只有一个参数,及对同类对象的引用。
形如 X::X(X&)或X::X(const X &)【多数情况下】,二者选一后者能以常量对象作为参数

att.如果没有定义复制构造函数,那么编译器生成默认复制构造函数。

复制构造函数一定存在,无参构造函数也称默认构造函数,是不一定存在的。

如何起作用
class Complex{
private:
double real,imag;
};
Complex c1;//调用缺省无参构造函数
Complex c2(c1);//调用缺省的复制构造函数,将c2初始化成和c1一样

如果定义的自己的复制构造函数,则默认的复制构造函数不存在
Complex(const Complex &c)
不允许有形如X::X(X)的构造函数 括号里必须是引用不能是对象
exp.

class CSample{
CSample(CSample){
}//error
};

复制构造函数起作用的三种情况

1.当用一个对象去初始化同类的另一个对象时

exp.
Complex c2(c1);
Complex c2=c1;//初始化语句,非赋值语句

2.如果某函数有一个参数是类A的对象,那么该函数被调用时,类A的复制构造函数将被调用

3.如果函数返回值是类A的对象时,则函数返回时,A的复制构造函数被调用

att.对象间赋值并不导致复制构造函数被调用

常量引用参数的使用

void fun(CMyclass obj_){
cout<<"fun"<

这样的函数调用时生成形参会引发复制构造函数的调用,开销太大
所以可以考虑使用CMyclass&引用类型作为参数
如果希望确保实参的之在函数中不应被改变,那么可以加上const关键字

你可能感兴趣的:(C++笔记6)