2017-05-15 3 views
3

ich mich gefragt, ob jemand diese Frage zu mir erklären könnte:Methoden, die Sie in einem Copy-Konstruktor nicht implizit aufrufen kann

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

Welche der folgenden Methoden gegeben werden niemals implizit an Position genannt XXX im folgenden Code?

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

A.Orange::Orange()

B. Standardkonstruktoren für Datenelement, das in Klasse orange

C.Fruit::Fruit()

D. Standardkonstruktoren Datenelement innerhalb der Klasse Frui t

E.A und C

F. A und D

Die bereitgestellte Antwort ist F.

Ich dachte, dass dies ein Kopierkonstruktor ist und dass die Klasse Orange eine Kindklasse ist und Fruit eine Basisklasse ist.

war ich nicht sicher, warum die Antwort A, wäre und dachte, dass der Grund, es ist D ist, weil Orange Mitglieder Daten haben können, dass Fruit haben nicht, daher können Sie es nicht verwenden Standard-Konstruktor .

Jede Hilfe würde massiv geschätzt werden.

+1

Keine sehr gute Frage. Die Standard-Konstruktoren für 'Fruit'-Mitglieder * werden * nicht nur an Position XXX, sondern auch als Aufruf von' Fruit :: Fruit() 'aufgerufen. –

+0

@BoPersson es ist nur eine Frage von meinem Dozenten Ich kämpfe um meinen Kopf rum –

+0

@Lucy - Ich vermutete, dass aus dem Bild, aber es ist immer noch ein bisschen erfunden. –

Antwort

4

Ich dachte, dass dies ein Kopierkonstruktor ist ...

Es ist nicht. Eine Kopie Konstruktor eine Instanz der gleichen Klasse, dieser Konstruktor von Oranien eine Instanz von Farbe als Argument

... und die Orange-Klasse ist ein Kind Klasse und Frucht ist eine Basisklasse ..

nimmt

Das ist richtig.

Ich war mir nicht sicher, warum die Antwort A wäre ...

Es ist A, weil ein Konstruktor von Orange niemals implizit einen anderen Konstruktor von Orange aufruft.

... und dachte, dass der Grund dafür D ist, weil Orange Datenelemente haben kann, die Obst nicht hat, deshalb kann man es nicht verwenden, es ist Standardkonstruktor.

Ich finde diese Argumentation seltsam. Ich sehe nicht, wie die Mitglieder von Orange beeinflussen könnten, wie die Mitglieder von Fruit gebaut werden können.

Der Wortlaut der Frage ist nicht eindeutig. Die Konstrukteure der Mitglieder von Fruit werden innerhalb des Konstrukteurs von Fruit genannt, und da der Konstrukteur von Fruit an der markierten Position ist, sind auch die Konstruktionen seiner Mitglieder - zumindest indirekt. Also, ob D eine Antwort neben A ist, hängt von einer Technik und wie Sie die Frage interpretieren.

+0

Die Frage lautet: "werden NIE implizit aufgerufen", also sind Fälle, in denen sie angerufen werden können oder nicht, keine richtigen Antworten. Das macht es meiner Meinung nach (fast) klar. Alles, was man anrufen könnte, kann als Antwort ausgeschlossen werden. –

+0

@KarstenKoop Fair genug, mein Postskriptum war ein bisschen sinnlos. – user2079303

Verwandte Themen