浅析C++的构造函数,拷贝构造函数和赋值运算符 .
2012-10-22 12:21
525 查看
一.首先通过下面的测试程序,粗略的感知一下这三个函数分别在什么情况下被调用
#include <iostream>
using namespace std;
class T
{
public:
T() { cout<<"dafault constructor"<<endl;}
T(const T & t) {cout<<"copy constructor"<<endl;}
void operator =(const T &t) { cout<<"assignment operator"<<endl;}
};
int main ( int argc,char * argv[])
{
T a;
T b=a;
b=a;
return 1;
}
程序运行结果为
dafault constructor //T a;
copy constructor // T b=a;
assignment operator // b=a;
从该测试程序我们可以知道,拷贝构造函数与赋值运算符虽然所完成的工作在概念上很相似——都是根据一个已有对象来对确定另一个对象的内容,然而二者有本质 的不同,前者用于初始化,而后者用于赋值操作。换言之,对于拷贝构造函数,当其被调用时,源对象已存在,而目标对象还未被创建;而对于赋值运算符,当其被 调用时,源对象和目标对象都已存在。
#include <iostream>
using namespace std;
class T
{
public:
T() { cout<<"dafault constructor"<<endl;}
T(const T & t) {cout<<"copy constructor"<<endl;}
void operator =(const T &t) { cout<<"assignment operator"<<endl;}
};
int main ( int argc,char * argv[])
{
T a;
T b=a;
b=a;
return 1;
}
程序运行结果为
dafault constructor //T a;
copy constructor // T b=a;
assignment operator // b=a;
从该测试程序我们可以知道,拷贝构造函数与赋值运算符虽然所完成的工作在概念上很相似——都是根据一个已有对象来对确定另一个对象的内容,然而二者有本质 的不同,前者用于初始化,而后者用于赋值操作。换言之,对于拷贝构造函数,当其被调用时,源对象已存在,而目标对象还未被创建;而对于赋值运算符,当其被 调用时,源对象和目标对象都已存在。
相关文章推荐
- 浅析C++的构造函数,拷贝构造函数和赋值运算符
- C++构造函数、拷贝构造函数、赋值运算符漫谈(二)——函数返回值
- C++构造函数、拷贝构造函数、赋值运算符漫谈(二)——函数返回值
- C++ 学习笔记(13)拷贝构造函数、拷贝赋值运算符、移动构造函数、移动赋值运算符、析构函数、右值引用、引用限定符
- C++构造函数、拷贝构造函数、赋值运算符重载 调用时机 GCC与VC在对象作为返回值的不同处理
- C++构造函数、拷贝构造函数、赋值函数浅析
- c/c++ 构造函数、拷贝构造函数、析构函数和赋值运算符重载
- C++构造函数、拷贝构造函数、赋值运算符漫谈(二)——函数返回值
- 关注C++细节——含有本类对象指针的类的构造函数、析构函数、拷贝构造函数、赋值运算符的例子
- C++ 的构造函数,拷贝构造函数,赋值运算符
- C++构造函数语意学——默认拷贝构造函数
- C++ 构造函数 析构函数 拷贝构造函数 运算符重载解析。
- 拷贝构造函数、赋值运算符、构造函数的区别及关系?
- 【C++对象模型】构造函数语意学之二 拷贝构造函数
- C++ 拷贝构造函数 赋值构造函数
- <C++>14.构造函数的重载与拷贝构造函数
- 详解C++ 拷贝构造函数和赋值运算符
- C++ Copy Constructor (拷贝构造函数,复制构造函数)
- 看来,C++有默认的拷贝构造函数和赋值运算符=!
- C++学习总结——类和对象、构造函数和拷贝构造函数