手机版
你好,游客 登录 注册
背景:
阅读新闻

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

[日期:2014-03-17] 来源:Linux社区  作者:fox64194167 [字体: ]

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;

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

代码工作非常符合我们预期,因为系统会提供一个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

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

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

linux
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款