首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

c++primer 默认构造函数解决方法

2012-09-12 
c++primer 默认构造函数一道判断题://如果一个类没有有意义的默认值,则该类不因该提供默认构造函数回答:不

c++primer 默认构造函数
一道判断题:
//如果一个类没有有意义的默认值,则该类不因该提供默认构造函数
回答:不正确,因为如果一个类没有默认构造函数(指的是该类只提供了构造函数,但没有提供自己的默认构造函数),则在编译器需要隐式使用默认构造函数的环境中,该类就不能使用,所以,如果一个类定义了其他构造函数,则通常也因该提供一个默认构造函数。

求解释:1.不是说,当类中没有任何的构造函数时,编译器才会提供一个默认构造函数的
  2.什么是“没有意义的默认值”?
 

[解决办法]
2.什么是“没有意义的默认值”?
就是在默认构造函数的时候有那种class A{ public: A( int a = 0 ){};private int s;};就是没有那个默认参数的时候
[解决办法]
不是说,当类中没有任何的构造函数时,编译器才会提供一个默认构造函数的
编译器提供的默认构造函数是啥也不干的 就是一个空的 相当于 class A{public: A(){};};就是这个形式的
当你需要类型转换的时候是没法作用的
[解决办法]
类型默认值就是,比如说你创建一个complex类型的实例:complex a;a的实部和虚部默认就是0,这个0就叫做complex的默认值,它是有意义的
假设有一个学生Student类,它可能就没有“有意义的默认值”。你创建一个Student实例时:Student b;
给b一个默认的姓名、班级、年龄、性别、学号之类的并没有什么意义。


从语义上来说,如果一个类型“没有有意义的默认值”,则不需要提供缺省构造函数
但是从语法上来说,有时候编译器需要调用缺省构造函数啊。如果你的类没有任何构造函数,那么编译器会给你“创建”一个缺省构造函数;但如果你的类有其他构造函数,编译器就不会这么做,需要自己写一个缺省构造函数。
这时候,自己写缺省构造函数就是一种语法上的要求了,不管你的类型是否有“有意义的默认值”都得写一个缺省构造函数充数。

比如说,你要创建一个Student类型的数组
Student stds[5];
编译器就要求Student类有可访问的缺省构造函数
如果你的Student类有其他的构造函数,那为了能够创建Student数组,你还必须提供一个缺省构造函数
尽管Student类没有有意义的默认值

[解决办法]
如果你没有定义构造函数,编译器给你个默认无参的。
如果你定义了,系统就不会给你定义默认无参的构造子了。如果调用无参的,需要你自己去定义。
[解决办法]
C++ Primer Fourth Edition(中英文对照阅读版).chm

热点排行