C++复制构造函数和赋值符的区别
2015-10-24 23:44
211 查看
From http://blog.csdn.net/randyjiawenjie/article/details/6666937 非常感谢原作者分享。
class CTest
{
public:
CTest(); //构造函数
CTest(const CTest &); //复制构造函数
CTest & operator = (const CTest &); //赋值符
};
CTest::CTest()
{
cout<<"Constructor of CTest"<<endl;
}
CTest::CTest(const CTest & arg)
{
cout<<"Copy Constructor of CTest"<<endl;
}
CTest & CTest::operator = (const CTest & arg)
{
cout<<"Assign function of CTest"<<endl;
}
int main()
{
CTest a;
CTest b(a);
CTest c = a; //注意,这里仍然是使用复制构造函数
a = c; //使用赋值符
return 0;
}
运行的结果如下:
Constructor of CTest
Copy Constructor of CTest
Copy Constructor of CTest
Assign function of CTest
一切都是很显然的了。
http://hi.baidu.com/calrincalrin/blog/item/b313045023fd66998d543041.html总结如下:
复制构造函数与赋值操作符之间的区别
[b]拷贝构造函数是一种特殊的构造函数,函数的名称必须和类名称一致,它必须的一个参数是本类型的一个引用变量。[/b]
复制构造函数又称拷贝构造函数,它与赋值操作符间的区别体现在以下几个方面
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.[b]当类中含有指针成员时,两者的意义有很大区别[/b]
复制构造函数需为指针变量分配内存空间,并将实参的值拷贝到其中;而赋值操作符它实现的功能仅仅是将‘=’号右边的值拷贝至左值,在左边对象内存不足时,先释放然后再申请。当然赋值操作符必须检测是否是自身赋值,若是则直接返回当前对象的引用而不进行赋值操作
class CTest
{
public:
CTest(); //构造函数
CTest(const CTest &); //复制构造函数
CTest & operator = (const CTest &); //赋值符
};
CTest::CTest()
{
cout<<"Constructor of CTest"<<endl;
}
CTest::CTest(const CTest & arg)
{
cout<<"Copy Constructor of CTest"<<endl;
}
CTest & CTest::operator = (const CTest & arg)
{
cout<<"Assign function of CTest"<<endl;
}
int main()
{
CTest a;
CTest b(a);
CTest c = a; //注意,这里仍然是使用复制构造函数
a = c; //使用赋值符
return 0;
}
运行的结果如下:
Constructor of CTest
Copy Constructor of CTest
Copy Constructor of CTest
Assign function of CTest
一切都是很显然的了。
http://hi.baidu.com/calrincalrin/blog/item/b313045023fd66998d543041.html总结如下:
复制构造函数与赋值操作符之间的区别
[b]拷贝构造函数是一种特殊的构造函数,函数的名称必须和类名称一致,它必须的一个参数是本类型的一个引用变量。[/b]
复制构造函数又称拷贝构造函数,它与赋值操作符间的区别体现在以下几个方面
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.[b]当类中含有指针成员时,两者的意义有很大区别[/b]
复制构造函数需为指针变量分配内存空间,并将实参的值拷贝到其中;而赋值操作符它实现的功能仅仅是将‘=’号右边的值拷贝至左值,在左边对象内存不足时,先释放然后再申请。当然赋值操作符必须检测是否是自身赋值,若是则直接返回当前对象的引用而不进行赋值操作
相关文章推荐
- 字符串替换的一个工作实例
- c语言之 函数
- C语言分支结构和循环结构
- c++ 算法设计与分析(第四版) 流水作业调度
- 006--C++动态内存(简介)
- C++在命令行中回车实现默认输入
- c语言之指针理解一
- C++
- occcont.cpp 925
- C/C++ sort 函数的用法
- assert
- C++输入流cin方法详解
- C++设计模式之策略模式
- C++读取INI配置文件
- C++primer学习:拷贝控制(7):对象移动
- VC++ 在两个程序中 传递字符串等常量值的方法:使用了 WM_COPYDATA 消息的
- C/C++中<>和“”的区别
- C语言生成随机数
- C++用数组存放数据
- C++ 数组array与vector的比较