2017-06-08 2 views
1

Ich lerne C++ und stieß auf diesen Code, bei dem der Konstruktor initialisiert wird, ohne Membervariablen zu deklarieren. Außerdem wird das Objekt ohne Parameter erstellt. Wird stattdessen ein Standardkonstruktor aufgerufen?Klassenobjekt wird initialisiert, ohne Membervariablen zu definieren

Wird die abgeleitete Klasse auch Zugriff auf x und y haben, wenn diese Klasse geerbt wird?

// Beispielprogramm

#include <iostream> 
#include <string> 

class game 
{ 
public: 
    game(int x = 0, int y = 100); // Do they get defined as members? 
    int z; 
}; 

game::game(int x, int y) : z(x) 
{ 
    std::cout << x; 
} 

int main() 
{ 
    game g; // passed w/o parameters. 
    return 0; 
} 
+0

Sie Zugriff auf x und y durch eine Basisklassenkonstruktor von der abgeleiteten Klasse aufgerufen haben könnte. –

+1

Da Sie allen Argumenten des Konstruktors Standardargumente zuweisen, wird er zum Standardkonstruktor, da er ohne Angabe von Argumenten aufgerufen werden kann. –

+1

Wie bei jeder Funktion verhält sich das Argument wie eine lokale Variable und wird nicht mehr angezeigt, wenn die Funktion zurückgegeben wird. Das gilt auch für Konstrukteure. Weder Konstruktorargumente noch lokale Konstruktorvariablen werden zu Membervariablen der Klasse. –

Antwort

2

Auch das Objekt ohne Parameter erstellt. Wird stattdessen ein Standardkonstruktor aufgerufen?

Sie deklarieren Konstruktor wie folgt:

game(int x = 0, int y = 100); 

Und die Umsetzung:

game::game(int x, int y) : z(x) 
{ 
    std::cout << x; 
} 

Da Sie Standardargumente für den Konstruktor angegeben haben, wenn Sie anrufen:

game g; 

Es ist das gleiche wie ca lling:

game g {0, 100}; 

Da die Standardargumente für den Konstruktor bereitgestellt werden.

game(int x = 0, int y = 100); // Werden sie als Mitglieder definiert?

Sie werden nicht als Member definiert, es sei denn, Sie legen ihre Werte auf Member in der Klasse fest. x und y beide gehen am Ende des Konstruktors aus dem Geltungsbereich.

Wird diese Klasse auch geerbt, hat die abgeleitete Klasse Zugriff auf x und y?

Nicht direkt, die Sie sehen können, wie folgt:

class Derived : public game 
{ 
public: 
    Derived(); 
}; 

Derived::Derived() : game(100, 100) //Or whatever arguments 
{ 
    //... 
} 
+1

Vielen Dank. Ich hab es jetzt. – Cleverboy

Verwandte Themen