C++ Copy Constructor (拷贝构造函数,复制构造函数)

1.什么是Copy Constructor?

Copy Constructor 是一个特殊的构造函数,一般只有一个参数,这个参数一般是用const修饰的,对自己类的一个引用(reference)。什么时候会用到Copy Constructor?

当我们定义一个对象时,它是由另外一个对象来初始化的时候就用到Copy Constructor了。还有就是在一个方法以值作为参数传进去或者一个方法中以值作为返回。

对于我这新手C++,Copy Constructor 用的比较少,真正用到了也不知道,因为一个类缺少 Copy Constructor 时,编译器会自动生成一个。

2.赶快来看一个Copy Constructor例子

2.1系统默认会提供一个Copy Constructor

class People{
private:
 int m_age;
public:
 People(int age):m_age(age){
  cout << "constructor" << endl;
 }

~People(){
  cout << "destructor" << endl;
 }
 int getAge() const{
  return m_age;
 }
};

一个简单的类,叫People,只有一个属性age

People p1(18);
    cout << "p1's age " << p1.getAge() << endl;
    People p2(p1);
    cout << "p2's age " << p2.getAge() << endl;

当我们调用上面的代码时的输出结果就是:

C++ Copy Constructor (拷贝构造函数,复制构造函数)

代码工作非常符合我们预期,因为系统会提供一个Copy Constructor,对类里的属性进行简单的赋值工作。

2.2自定义的Copy Constructor

class People{
private:
    int m_age;
public:
    People(int age):m_age(age){
        cout << "constructor" << endl;
    }
    //copy constructor
    People(const People& p){
        cout << "copy constructor" << endl;
    }

~People(){
        cout << "destructor" << endl;
    }
    int getAge() const{
        return m_age;
    }
};
People p1(18);
    cout << "p1's age " << p1.getAge() << endl;
    People p2(p1);
    cout << "p2's age " << p2.getAge() << endl;

这次我们自定义了一个Copy Constructor

还是调用上次的代码,结果:

C++ Copy Constructor (拷贝构造函数,复制构造函数)

看,成功的调用了我们的copy constructor,因为我们的copy constructor 里什么也没做,所以p2的age就是一个未初始化的int值了。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/2f97d9bd88559829374254ee779a7da8.html