C++复制构造函数和赋值符的区别

#include "stdafx.h"
#include <stdio.h>
#include <iostream>
using namespace std;
//  Copy Constructor
//using namespace std;
// Assign sign
class MyClass
{
public:
 MyClass();
 //
 MyClass(const MyClass &);
 //
 MyClass & operator = (const MyClass &);
 ~MyClass();
private:
};
MyClass::MyClass()
{
 std::cout << "Constructor of MyClass" << endl;
}
MyClass::MyClass(const MyClass &a)
{
 cout << "Copy constructor of MyClass" << endl;
}
MyClass & MyClass::operator=(const MyClass &a)
{
 cout << "Assign Function of MyClass" << endl;
 
 return *this;
}
MyClass::~MyClass()
{
}
int _tmain(int argc, _TCHAR* argv[])
{
 MyClass a;
 MyClass b(a);
 MyClass c = a;
 a = c;

 return 0;
}

  1. Constructor of MyClass
    Copy Constructor of MyClass
    Copy Constructor of MyClass
    Assign function of MyClass

    一切都是很显然的了。

  2. 复制构造函数与赋值操作符之间的区别
    复制构造函数又称拷贝构造函数,它与赋值操作符间的区别体现在以下几个方面
    1.从概念上区分:
    复制构造函数是构造函数,而赋值操作符属于操作符重载范畴,它通常是类的成员函数
    2.从原型上来区分:
    复制构造函数原型ClassType(const ClassType &);无返回值
    赋值操作符原型ClassType& operator=(const ClassType& );返回值为ClassType的引用,便于连续赋值操作
    3.从使用的场合来区分:
    复制构造函数用于产生对象,它用于以下几个地方:函数参数为类的值类型时、函数返回值为类类型时以及初始化语句,例如(示例了初始化语句,函数参数与函数返回值为类的值类型时较简单,这里没给出示例)
    ClassType a;         //
    ClassType b(a);     //调用复制构造函数
    ClassType c = a;    //调用复制构造函数
    赋值操作符要求‘=’的左右对象均已存在,它的作用就是把‘=’右边的对象的值赋给左边的对象
    ClassType e;
    Class Type f;
    f = e;              //调用赋值操作符
    4.当类中含有指针成员时,两者的意义有很大区别
    复制构造函数需为指针变量分配内存空间,并将实参的值拷贝到其中;而赋值操作符它实现的功能仅仅是将‘=’号右边的值拷贝至左值,在左边对象内存不足时,先释放然后再申请。当然赋值操作符必须检测是否是自身赋值,若是则直接返回当前对象的引用而不进行赋值操作


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值