我想知道是否有人能向我解释这个问题:
给出
class Fruit {...}; class Orange : public Fruit {....};
以下哪种方法永远不会在位置隐式调用 XXX在以下代码中?
Orange::Orange(const Colour &colour) XXX {...}
A。
Orange::Orange()
B。类Orange中数据成员的默认构造函数
C。
Fruit::Fruit()
D。类fruit中数据成员的默认构造函数
E。 A 和 C
F。 A 和 D
提供的答案为 F 。
我在想这是一个复制构造函数,而类Orange
是一个子类,而Fruit
是一个基类。
我不确定为什么答案会 A ,并且认为它是 D 的原因是因为Orange
可能有数据成员Fruit
没有,因此你不能使用它的默认构造函数。
任何帮助都会受到大力赞赏。
答案 0 :(得分:4)
我在想这是一个复制构造函数......
不是。复制构造函数接受同一个类的实例,Orange的这个构造函数将Color的一个实例作为参数
......那个橙色的类是一个子类,而水果是一个基类..
这是正确的。
我不确定为什么答案会是A ......
它是A,因为Orange的构造函数从不隐式调用Orange的另一个构造函数。
...并且认为它是D的原因是因为橙色可能有水果没有的数据成员因此你不能使用它的默认构造函数。
我觉得这个推理很奇怪。我看不出Orange的成员如何影响Fruit的成员是如何构建的。
问题的措辞含糊不清。 Fruit成员的构造函数在Fruit的构造函数中被调用,并且由于Fruit的构造函数位于标记位置,因此其成员的构造也是如此 - 至少是间接构造。因此,除了A之外,D是否是答案取决于技术性以及您如何解释问题。