avatar
C++ online Test 一题# JobHunting - 待字闺中
h*g
1
template
class Foo
{
T tVar;
public:
Foo(T t) : tVar(t) { }
};
class FooDerived : public Foo { };
FooDerived fd;
What is preventing the above code from being legal C++?
A.
The initialization of tVar occurs outside the body of Foo's constructor.
B.
FooDerived uses the non-C++ type std::string.
C.
tVar is a variable of an unknown type.
D.
FooDerived is a non-template class that derives from a template class.
E.
A constructor must be provided in FooDerived.
为啥E 是正确的呢?
avatar
l*l
2
Because 'FooDerived fd;' needs default constructor.
avatar
h*g
3
默认的ctr 不是系统自动给FooDerived fd调用的吗?为啥还得写出来?
avatar
l*l
4
Because base class already has a ctr, so no system generted ctr.

【在 h*****g 的大作中提到】
: 默认的ctr 不是系统自动给FooDerived fd调用的吗?为啥还得写出来?
avatar
d*d
5
Because the base class's ctor is not a default ctor.

【在 l******l 的大作中提到】
: Because base class already has a ctr, so no system generted ctr.
avatar
f*4
6
class A{
public:
A(int){}
};
class B: public A{
public:
B():A(0){}
};
avatar
h*g
7
哦,因为子类对象创建时 先要调用基类default构造函数,但因为default 被omit了,
所以会出错。
谢谢各位~~~

【在 f****4 的大作中提到】
: class A{
: public:
: A(int){}
: };
: class B: public A{
: public:
: B():A(0){}
: };

avatar
h*g
8
那如果在baseclass 自己写一个default ctr 也应该解决问题了吧?

【在 h*****g 的大作中提到】
: 哦,因为子类对象创建时 先要调用基类default构造函数,但因为default 被omit了,
: 所以会出错。
: 谢谢各位~~~

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。