c++构造函数和赋值操作符
2015-12-13 15:12
288 查看
详解:/content/3670957.html
例子:
需要注意的几点:
1、系统会自动实现默认构造函数,复制构造函数和赋值操作。
2、只要自己实现了一个构造函数(包括复制构造函数),系统不再自动生成默认构造函数;
3、自己实现了一个构造函数(没有实现复制构造函数),系统会自动生成复制构造函数;
4、CTest test3 = test1; 这种情况下调用的是复制构造函数,而不是赋值操作;
5、构造函数默认支持隐式转换,可以使用explicit来避免隐式转换;
6、深拷贝和浅拷贝,系统默认实现的是浅拷贝。
例子:
// 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、深拷贝和浅拷贝,系统默认实现的是浅拷贝。
相关文章推荐
- 2015年蓝桥杯C/C++ B组题目题解
- C++学习笔记(3)
- C语言基础知识总结
- C语言总结
- C++ 实现 Data类(简单的日期计算器)
- 自己总结的一些C语言库函数
- c++ 模板类 单链表
- C/C++ 之 gdb 调试
- c++ 模板类实现 动态顺序表 基础操作
- C/C++ 之 库
- C/C++ 之 restrict关键字
- c语言总结
- 一起talk C栗子吧(第七十五回:C语言实例--DIY ls命令)
- c++ 构造函数初始化列表
- C++ Windows读写INI文件
- C语言 makefile文件与头文件的写法。
- c++编译 extra qualification '类名' on member '变量名' error
- 博弈总结
- [c++ 温故知新]类内char* 指针内存分配长度
- 【ThinkingInC++】2、输入和输出流