2017-10-26 1 views
0

Ich habe Schwierigkeiten, einen Konstruktor für meine Kindklasse zu implementieren. Ich verstehe, dass der Zweck des Konstruktors darin besteht, die Zustände der Klasse auf die übergebenen Werte zu setzen. korrigiere ich das?So definieren Sie den Konstruktor in einer Kindklasse

Ich erhalte einen Fehler;

keine passende Funktion für Aufruf von ‚Super‘

Meine Frage ist habe ich meinen Konstruktor für ein Kind Klasse der Superklasse zu verknüpfen? Was ist die Beziehung in Bezug auf Konstruktoren zwischen den beiden Klassen?

Antwort

0

Buildings hat keinen Standardkonstruktor. Sie müssen explizit den nur vorhandenen Buildings-Konstruktor aufrufen und die entsprechenden Argumente übergeben.

Wenn Sie die öffentliche Standardkonstruierung von Buildings Objekten verbieten möchten, aber untergeordneten Klassen erlauben, sie zu verwenden, können Sie einen Standardkonstruktor erstellen, der protected lautet. Wie

class Buildings 
{ 
public: 
    // Public constructor, only way to construct object of this class 
    // for the general public 
    Buildings(float, float, string); 

    // Other public functions... 

protected: 
    // Default constructor, which initializes the private members 
    // to some suitable values 
    // Only usable by child-classes 
    Buildings() 
     : price(0), area(0), city("") 
    {} 

private: 
    float price, area; 
    string city; 
}; 
+0

ah Ich danke, also, wenn ich dies tun und einen Standardkonstruktor für meine Gebäude-Klasse verwenden, muss ich noch meinen Konstruktor für diese Gebäudeklasse in der Öffentlichkeit implementieren? –

+0

ist mein Konstruktor für die Kindklasse genauso wie in meinem Code? Tut mir leid, ich versuche nur, meinen Kopf herumzukriegen –

+0

@TonyHibbert Sie sollten die 'Apartment' Klasse nicht mit dem Beispiel in meiner Antwort ändern müssen. Beachten Sie jedoch, dass die Membervariablen "Buildings" die vom Standardkonstruktor initialisierten Standardwerte haben. –

0

Sie müssen den Konstruktor der übergeordneten Klasse in der member initializer list Ihrer untergeordneten Klasse aufrufen.

struct A { 
    A(int a) : a_(a) {} 
    int a_; 
}; 

struct B : public A { 
    B(int a, int b) : A(a), b_(b) {} 
    int b_; 
}; 
+0

so würde es aussehen; Wohnung :: Wohnung (float numres, float numrent, float numrentpr): Gebäude (float, float, string); –

+0

Entschuldigung, es wäre dieses Nein; Wohnung :: Wohnung (float numres, float numrent, float numrentpr): Preis (b_price), Bereich (b_area), Stadt (b_city); –

Verwandte Themen