课程咨询 :025-84640158

  • C++中赋值函数和拷贝构造函数

    发布:南京C++培训      来源:达内新闻      

  • 达内南京C++培训老师介绍,拷贝构造函数发生在对象还没有创建,需要创建时

    如:   MyClass obj1(1);  

    MyClassobj3 = obj1;

    赋值操作符重载仅发生在对象已经执行过构造函数,即已经创建的情况下

    如:

    MyClass obj1(1);

    MyClass obj3;

    obj3 = obj1;

    具体代码如下:

    class MyClass

    {

    public:

    MyClass( int i = 0)

    {

    cout << i;

    }

    MyClass( const MyClass &x)

    {

    cout << 2;

    }

    MyClass &operator=(const MyClass & x)

    {

    cout << 3;

    return *this ;

    }

    ~MyClass()

    {

    cout << 4;

    }

    };

    int main()

    {

    MyClass obj1(1);

    MyClass  obj2(2);

    MyClass obj3;

    obj3 = obj1;

    return 0;

    }

    输出:1203444

    先创建对象obj1,调用构造函数并初始化为1,输出1

    再创建对象obj2,调用构造函数并初始化为2,输出2

    创建对象obj3,调用构造函数,使用默认值为0,输出0

    obj1赋值给obj3时,调用赋值函数,输出3

    再依次析构,析构的顺序和调用构造的顺序相反

    先析构obj3,在析构obj2,最后析构obj1

    class MyClass

    {

    public:

    MyClass( int i = 0)

    {

    cout << i;

    }

    MyClass( const MyClass &x)

    {

    cout << 2;

    }

    MyClass &operator=(const MyClass & x)

    {

    cout << 3;

    return *this ;

    }

    ~MyClass()

    {

    cout << 4;

    }

    };

    int main()

    {

    MyClass obj1(1);

    MyClass   obj2(2);

    MyClass obj3 = obj1;

    return 0;

    }

    输出:122444

    依次创建对象obj1,obj2,调用两次构造,分别输出初始化的值1,2

    MyClass obj3 = obj1;由于赋值的时候obj3还没有创建,所以会调用拷贝构造函数,输出2

    再依次析构三个对象

上一篇:浅析C++多态及其实现模式

下一篇:关于C++中typedef的用法定义函数指针

最新开班日期  |  更多

c++--零基础全日制班

c++--零基础全日制班

开班日期:04-28

c++--零基础周末班

c++--零基础周末班

开班日期:04-28

c++--高薪就业班

c++--高薪就业班

开班日期:04-28

c++--免费训练营

c++--免费训练营

开班日期:04-28

  • 地址:南京市玄武区洪武北路121号苏苑大厦5楼
  • 课程培训电话:025-84640158     全国服务监督电话:400-111-8989
  • 服务邮箱 tousu@tedu.cn
  • 2001-2016 达内时代科技集团有限公司 版权所有 京ICP证8000853号-56