D
1. Standardkonstruktor = Defaultkonstruktor. Der wird erstellt, wenn du keinen eigenen deklariert hast. Der Standarkonstruktor wird aufgerufen für Objekte, die du erstellst, ohne einen Parameter anzugeben.
Klassenname::Klassenname() //Standardkonstruktor
{}
Und das hier doch auch:
Klassenname::Klassenname(int a, int b) //Konstruktor
{}
int main (){
Klassenname k; //Standarkonstruktor wird aufgerufen
Klassenname k (2,5); //Konstruktor (int, int ) wird aufgerufen
};
Und dieser Standard/oder Defaultkonstruktor belegt dann alle Eigenschaften eines Objekts beim Erstellen mit 0, richtig?
Falsch. Der Konstruktor macht nichts anderes, als die Konstruktoren der Objete aufzurufen. Mit einem int wird nichts gemacht, weil das ein eingebauter Typ ist und daher keinen Konstruktor hat. Sprich du musst den (mit der Initialisierungsliste) selber initialisieren. Falls eines deiner Objekte (in einer Klasse) KEINEN Standarkonstruktor anbietet, musst du ebenfalls mit der der Initialisierungsliste initialisieren.Ebenso musst du mit const- Obejekten verfahren. (Achtung: bei Debug Builds, wird oftmals 0 initialisiert, was aber nicht Garantiert ist und in der Release Versoin dann inkonsitzen ergeben kann, wenn du davon ausgehst, dass mit 0 initialisiert wird.)
2. Das Objetkt wird ja mit Buch initialisiert, also musst du auch dort die Parameter für Produkt angeben. Sonst hast du die Daten ja nicht.
Edit:
3. Siehe Initialisierungsliste