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

再依次析构三个对象


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值