C++之 构造函数调用规则
2016-02-19 21:29
483 查看
1)当类中没有定义任何一个构造函数时,C++编译器会提供默认无参构造函数和默认拷贝构造函数。
2)当类中定义了拷贝构造函数时,C++编译器不会提供无参构造函数。
3)当类中定义了任意的非拷贝构造函数,即类中提供了有参构造函数,C++编译器不会提供无参构造函数。
4)默认拷贝构造函数成员变量只进行简单赋值
总结:只要你写了构造函数,那么你就必须要用!!!
但是当把有参构造函数里的形参改成默认形参,这时就不会报错了。
2)当类中定义了拷贝构造函数时,C++编译器不会提供无参构造函数。
3)当类中定义了任意的非拷贝构造函数,即类中提供了有参构造函数,C++编译器不会提供无参构造函数。
4)默认拷贝构造函数成员变量只进行简单赋值
总结:只要你写了构造函数,那么你就必须要用!!!
// 构造函数使用规则.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> using namespace std; class Location{ public: Location(int xx, int yy){ X = xx; Y = yy; cout << "Constructor Object.\n"; } Location(const Location& obj){//copy构造函数 X = obj.X; Y = obj.Y; } ~Location(){ cout << X << "," << Y << " " << "Object destroyed." << endl; } int GetX(){ return X; } int GetY(){ return Y; } private: int X; int Y; }; int _tmain(int argc, _TCHAR* argv[]) { Location l1;//会报错 error C2512:“Location”:没有合适的默认构造函数可用 return 0; }
但是当把有参构造函数里的形参改成默认形参,这时就不会报错了。
// 构造函数使用规则.cpp : 定义控制台应用程序的入口点。 #include <iostream> using namespace std; class Location{ public: Location(int xx=0, int yy=0){ X = xx; Y = yy; cout << "Constructor Object.\n"; } Location(const Location& obj){//copy构造函数 X = obj.X; Y = obj.Y; } ~Location(){ cout << X << "," << Y << " " << "Object destroyed." << endl; } int GetX(){ return X; } int GetY(){ return Y; } private: int X; int Y; }; int _tmain(int argc, _TCHAR* argv[]) { Location l1;//不会报错 return 0; }
相关文章推荐
- 【源代码】将一个整数的每位数分解并按逆序放入一个数组中(用递归算法)(C语言实现)
- Basic C++ Container classes summary(Array, Vector, List)
- c语言入门之项目2.0——成绩等级
- C语言:【动态顺序表】动态顺序表的初始化、打印、尾插PushBack、尾删PopBack
- C++基础篇之 复制构造函数调用时机
- c/c++题目汇总一
- C语言之getopt使用
- 【hdu 2222】Keywords Search 中文题意&题解&代码(C++)
- 「Cplusplus」在命令提示符下编译C/C++源文件和运行可执行文件
- 整理摘抄 宏定义笔记
- C++之匿名对象与析构函数的关系
- C++ 在继承中虚函数、纯虚函数、普通函数,三者的区别
- [UVA227]Puzzle
- C++数据域封装
- EOF在C++中的定义为:const int EOF = -1;
- (三)C++简单知识介绍、helloworld场景文件分析及新建场景 dietary
- C++字符串类
- c语言入门之项目1.9——利用switch解决实际问题
- 数组名的指针
- C++虚函数表剖析