您的位置:首页 > 编程语言 > C语言/C++

c++构造函数和赋值操作符

2015-12-13 15:12 288 查看
详解:/content/3670957.html

例子:

// Constructor.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>

using namespace std;

class CTest
{
public:
/*explicit*/ CTest(int i = 0)
:m_i(i)
{
cout << "default constructor"  << " m_i = " << m_i << endl;
}

CTest(const CTest &rhs)
{
this->m_i = rhs.m_i;

cout << "copy constructor" << " m_i = " << m_i << endl;
}

CTest &operator=(const CTest &rhs)
{
this->m_i = rhs.m_i;

cout << "assignment operator" << " m_i = " << m_i << endl;

return *this;
}

private:
int m_i;

};

int _tmain(int argc, _TCHAR* argv[])
{
cout << "====test0 默认构造函数====" << endl;
CTest test0;
cout << "==========================" << endl;

cout << "====test1 自定义构造函数====" << endl;
CTest test1(1);
cout << "==========================" << endl;

cout << "====test2 复制构造函数====" << endl;
CTest test2(test1);
cout << "==========================" << endl;

cout << "====test3 =复制构造函数====" << endl;
CTest test3 = test1;
cout << "==========================" << endl;

CTest test4;
cout << "====test4 赋值操作符====" << endl;
test4 = test1;
cout << "==========================" << endl;

cout << "====test5 隐式自定义操作符====" << endl;
CTest test5 = 5;
cout << "==========================" << endl;

CTest test6;
cout << "====test6 隐式自定义操作符====" << endl;
test6 = 6;
cout << "==========================" << endl;

getchar();

return 0;
}
运行结果:



需要注意的几点:

1、系统会自动实现默认构造函数,复制构造函数和赋值操作。

2、只要自己实现了一个构造函数(包括复制构造函数),系统不再自动生成默认构造函数;

3、自己实现了一个构造函数(没有实现复制构造函数),系统会自动生成复制构造函数;

4、CTest test3 = test1; 这种情况下调用的是复制构造函数,而不是赋值操作;

5、构造函数默认支持隐式转换,可以使用explicit来避免隐式转换;

6、深拷贝和浅拷贝,系统默认实现的是浅拷贝。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: