- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C默认构造函数
C++ 默认构造函数
1、每个类必须有一个构造函数,否则没法创建对象;
2、若programer 没有提供任何构造函数,则C++提供一个默认的构造函数,该默认构造函数是无参构造
函数,它仅负责创建对象,不做任何初始化的工作;
3、只要programer 定义了一个构造函数(不管是无参还是有参构造),C++就不再提供默认的默认构造
函数。即如果为类定义了一个带参的构造函数,还想要无参构造函数,就必须自己定义;
4 、与变量定义类似,在用默认构造函数创建对象时,如果创建的是全局对象或静态对象,则对象的位模
式全为0,否则,对象值是随机的。
注:2 所述,C++在某些情况下会提供默认构造函数,但在某些情况下并不会自动调用。
实事上,当用户没有提供自定义的构造函数的时候,声明该类的对象,以及定义包含该对象的数组,都不
会调用默认构造函数;但定义包含该对象的容器时,会自动调用默认的构造函数。
举例如下:
#include iostream
#include vector
using std::cout;
using std::endl;
using std::vector;
class Student
{
public:
// Student() : val(6){} // 1
// Student(int val) : val(6){} // 2
int val;
};
void main()
{
Student s;
cout s.val; // 编译通过,但运行时出错:the variable s is being used
without being defined.
// 说明没有调用默认构造函数
Student arr[4];
cout arr[2]; // 编译通过,但运行出错:the variable arr is being used
without being defined.
// 说明没有调用默认构造函数
vector Student vec(5);
cout vec[3].val endl; //运行无误,但输出结果未定义(取决于编译器,可能是
随机值或0)
// 说明调用了默认构造函数
Student *ptr = new Student[4];
cout ptr[1].val; //运行无误,但输出结果未定义(取决于编译器,可能是随机值或0)
// 说明调用了默认构造函数
Student ss = Student(); // 显示调用
cout ss.val; // 运行无误,但输出结果未定义(取决于编译器,可能是随机值或0)
// 说明调用了默认构造函数
}
若将Student 定义体中的注释1 去掉,即自定义无参构造函数,则main 函数中的几种形式的对象定义都
会调用该自定义的无参构造函数;
但只将注释2 去掉,即自定义带参构造,而不提供无参构造,则main 函数的几种形式的对象定义都将因
为没有可用的默认构造函数而编译出错。
关于默认构造函数的几个错误认识
假期间闲来无事,就下载了某大师的VC++视频资料。在讲到C++时,说是如果程序员没有自己定义
默认构造函数,那么编译器会自动为我们产生一个默认的构造函数 (注:这是个错误的认识。编译器只在
某些情况下提供默认构造函数) 。本来这个错误的认识很多程序员都有,不足为奇。但有这么多年编程经
验的高手也有这样的错误认识就不禁让我哑然了。
其实编程语言和我们所用的任何软件没有区别,例如Photoshop 、AutoCAD 之类。其唯一不同的是我
们用的编程语言是基于编译器的,而应用软件是基于我们的编程语言的。
既然我们所用的软件是基于编译器的,那么理解编译器在背后到底为我们做了些什么、在什么情况下
做了哪些事情就显得异常重要。这就像Photoshop 会为你产生一些基本图形例如矩形、三角形之类,而不
会凭空产生一些风景优美的图片一样。
在《C++ Annotated Reference Manual(ARM)[
文档评论(0)