C++默认构造函数.pdf

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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)

f8r9t5c + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8000054077000003

1亿VIP精品文档

相关文档