2017-05-15 120 views
3

我想打电话如果有人能解释这个问题对我说:方法,你不能隐式的​​拷贝构造函数

鉴于

class Fruit {...}; 
class Orange : public Fruit {....}; 

下面哪个方法永远不会隐式调用在 位置XXX在下面的代码?

Orange::Orange(const Colour &colour) XXX {...} 

A.Orange::Orange()

B.类橙色内的数据成员的默认构造

C.Fruit::Fruit()

D.默认构造为数据成员在阶级frui吨

E.Ç

F.d

所提供的答案是˚F

我在想这是一个复制构造函数,并且该类Orange是一个子类,而Fruit是一个基类。

我不知道为什么答案会是一个,并认为其原因是d是因为Orange可能有数据成员,Fruit没有,所以你不能使用它的默认构造函数。

任何帮助将大规模赞赏。

+1

不是一个很好的问题。 “水果”成员*的默认构造函数被调用,不仅在位置XXX,而且因为调用了“Fruit :: Fruit()”。 –

+0

@BoPersson这只是我讲师给出的一个问题我正在努力让我的脑袋围绕它 –

+0

@Lucy - 我从图片中猜出了这一点,但它仍然有点做作。 –

回答

4

我在想,这是一个拷贝构造函数...

它不是。复制构造也采用相同的类的实例,此构造橙色采用彩色的实例作为参数

...那橙类是一个子类和水果是一个基类..

这是正确的。

我不确定为什么答案是A ...

这是一个因为Orange的构造函数从不隐式调用Orange的另一个构造函数。

...并认为它是D的原因是因为橙色可能有数据成员,水果没有,因此你不能使用它的默认构造函数。

我觉得这个推理很奇怪。我不明白Orange的成员如何影响Fruit的成员如何构建。

该问题的措词是不明确的。 Fruit成员的构造函数在Fruit的构造函数中调用,由于Fruit的构造函数处于标记位置,其成员的构造也是如此 - 至少是间接的。所以,除了A之外,D是否是一个答案取决于技术性以及你如何解释这个问题。

+0

这个问题说:“永远不会被隐式调用”,因此可以调用或不调用它们的情况不是正确的答案。这使得我的观点(几乎)清楚。所有可以调用的东西都可以作为答案排除在外。 –

+0

@KarstenKoop足够公平,我的文章稿件有点无意义。 – user2079303