2017-05-15 32 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