Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Konstruktoren von Klassen

Empfohlene Antworten

Veröffentlicht

Guten Morgen!

Bin gerade dabei den Umgang mit Konstruktoren von Klassen in C++ zu erlernen.

Dazu schreibe ich eine Klasse cwagen.

Dabei hat mir mein Lehrer folgende Möglichkeit genannt:


cwagen::cwagen(string marke = "Ford")

{     

[INDENT]this -> marke = marke;[/INDENT]


}

Damit soll angeblich die Angabe eines Parameters bei der Definition eines neuen Objekts optional sein, also das Folgende verkürzen:

cwagen::cwagen(string marke)

{     

[INDENT]this -> marke = marke;[/INDENT]


}


cwagen::cwagen(void)

{    

[INDENT]this -> marke = "Ford";[/INDENT]


}

Allerdings bricht der Compiler (Dev-C++) an der Stelle, an der ich ein neues Objekt definiere mit der Fehlermeldung "no matching function for call to `cwagen::cwagen()'" ab.

Nun meine Frage: Ist es überhaupt möglich diese Verkürzung zu verwenden und wenn ja, wo liegt der Fehler?

Im Voraus vielen Dank!

Also ich würde das nicht als Verkürzung bezeichnen. Es ist nur eine Art einen optionalen Parameter anzugeben. Nen Standardkonstruktor braucht man immer, egal was man tut. Das andere ist nur eine Überladung von dem Konstruktor, welcher dir die Möglichkeit gibt, einen Parameter anzugeben.

Verkürzung in dem Sinne, dass ich nur einen statt zwei Konstruktoren schreiben muss (und damit weniger Zeichen eintippen muss. :)

Allerdings bricht der Compiler (Dev-C++) an der Stelle, an der ich ein neues Objekt definiere mit der Fehlermeldung "no matching function for call to `cwagen::cwagen()'" ab.
Der Defaultparameter muss in der Deklaration des Konstruktors angegeben werden, nicht in der Definition.

Jetzt bin ich verwirrt. Ich meinte eigentlich die Stelle:

int main(int argc, char *argv[])

{

[INDENT]cwagen wagen;[/INDENT]


}

Hab den Fehler gefunden. Durfte den Default-Konstruktor nicht in die Datei cwagen.cpp schreiben, sondern er muss in cwagen.h.

Gibts einen bestimmten Grund dafür, dass man einen Konstruktor nicht wie "normale" Methoden in die cwagen.cpp auslagern kann?

Gibts einen bestimmten Grund dafür, dass man einen Konstruktor nicht wie "normale" Methoden in die cwagen.cpp auslagern kann?
Das hat nichts damit zu tun, dass das ein Konstruktor ist. Defaultparameter müssen bei der Methodendeklaration stehen (in deinem Fall in der Headerdatei), das ist alles.

Alles klar! Vielen Dank (auch an Anybody)! :)

Und Gruß nach Essen aus Dorsten. *g*

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.