g*********s 发帖数: 1782 | 1 【 以下文字转载自 JobHunting 讨论区 】
发信人: gandjmitbbs (Nothing), 信区: JobHunting
标 题: 关于构造函数的一道测试题
发信站: BBS 未名空间站 (Sun Dec 16 02:42:51 2007)
class Foo{
public:
//Foo(){}
Foo(int i){}
};
class Bar: Foo {
public:
Bar(){}
};
Bar objBar;
问编译是否能通过?如果不能如何修正?
自己试了一下,说没有合适的Foo默认构造函数可用。将那行注释关掉就行了。但是编
译器不是应该自动生成一个Foo::Foo(){}吗? |
P********e 发帖数: 2610 | 2 你没有ctor的时候,compiler才帮你弄一个
既然你已经有了
【在 g*********s 的大作中提到】 : 【 以下文字转载自 JobHunting 讨论区 】 : 发信人: gandjmitbbs (Nothing), 信区: JobHunting : 标 题: 关于构造函数的一道测试题 : 发信站: BBS 未名空间站 (Sun Dec 16 02:42:51 2007) : class Foo{ : public: : //Foo(){} : Foo(int i){} : }; : class Bar: Foo {
|
g*********s 发帖数: 1782 | 3 我有的那个不是default啊。难道只要我有任意一个自定义构造函数,编译器就放弃自
动生成吗?为何要这样设计呢?像这个例子,编译器完全可以推断出没有默认构函然后
自动生成啊。
【在 P********e 的大作中提到】 : 你没有ctor的时候,compiler才帮你弄一个 : 既然你已经有了
|
r*******y 发帖数: 290 | 4 编译器怎么知道你不是忘了输入参数了?
编译器要考虑很多情况的
【在 g*********s 的大作中提到】 : 我有的那个不是default啊。难道只要我有任意一个自定义构造函数,编译器就放弃自 : 动生成吗?为何要这样设计呢?像这个例子,编译器完全可以推断出没有默认构函然后 : 自动生成啊。
|
n****g 发帖数: 58 | 5 class Bar: Foo {
public:
Bar():Foo(5){} // 先构造Foo的对象,编译器找不到没有参数的构造函数。在子
类的构造函数后面加上父类带参数的构造函数就行了
};
Bar objBar;
【在 g*********s 的大作中提到】 : 【 以下文字转载自 JobHunting 讨论区 】 : 发信人: gandjmitbbs (Nothing), 信区: JobHunting : 标 题: 关于构造函数的一道测试题 : 发信站: BBS 未名空间站 (Sun Dec 16 02:42:51 2007) : class Foo{ : public: : //Foo(){} : Foo(int i){} : }; : class Bar: Foo {
|