C++ und schon wieder eine Frage...

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

C++ und schon wieder eine Frage...

Beitrag von Duff » 15.03.2009 11:09:44

Hallo,

ich hoffe ich nerve nicht mit meinem vielen Fragen zu C++.
Wenn ja, dann bitte posten und ich versuche mein Glück in einem anderen Forum (spezielles C++-Forum).

Aber bisher scheinen hier ja viele C++-Profis zu sein, die mir immer schnell und verständlich geantwortet haben (z.B. GoKi und Spasswolf).

Also ich habe eine Frage zu Zeile 25.

Code: Alles auswählen

  1 // exception04.cpp
  2 #include <iostream>
  3 using namespace std;
  4 
  5 class keineDatenMehr {
  6 public:
  7    keineDatenMehr(int a) {
  8       nr=a;
  9    }
 10    void meldeFehler() {
 11       cout << nr << endl;
 12    }
 13 private:
 14    int nr;
 15 };
 16 
 17 void Tuwas(int Problem) {
 18    if( Problem == 0 )
 19       throw keineDatenMehr(8);
 20 }
 21 
 22 int main() {
 23    try {
 24       Tuwas(0);
 25    } catch(keineDatenMehr& fehler) {
 26       fehler->meldeFehler();
 27    }
 28 }
Wieso ist da ein &-nötig?
Ich lege doch hier ein Objekt fehler der Klasse keineDatenMehr an.
Lege ich durch das &-Zeichen eine Referenzobjekt fehler der Klasse keineDatenMehr an?
Oh, yeah!

Benutzeravatar
GoKi
Beiträge: 2068
Registriert: 04.07.2003 23:08:56
Lizenz eigener Beiträge: MIT Lizenz

Re: C++ und schon wieder eine Frage...

Beitrag von GoKi » 15.03.2009 11:26:12

Es ist nicht nötig. Durch die Referenz vermeidest Du, dass eine Kopie der Exception erstellt wird.
Üblicherweise wird empfohlen ein catch mit call-by-reference durchzuführen, um eine Kopie zu vermeiden.
http://www.parashift.com/c++-faq-lite/e ... l#faq-17.7

Evtl. wird es durch den angepassten Code hier etwas deutlicher.
http://nopaste.debianforum.de/19742

PS: Argh, Klein/Groß-Buchstaben in einem Klassennamen.... :mrgreen:
MfG GoKi
:wq

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Re: C++ und schon wieder eine Frage...

Beitrag von Duff » 15.03.2009 12:15:29

Danke. Soweit habe ich es nun auch verstanden. Nur noch nicht wirklich, warum der Kopierkonstruktor aufgerufen wird.

PS: Zu dem Klein-/Groß-Buchstaben in Klassennamen hattest du mir mal diesen Link hier gepostet. (MyClass)
Oh, yeah!

Benutzeravatar
GoKi
Beiträge: 2068
Registriert: 04.07.2003 23:08:56
Lizenz eigener Beiträge: MIT Lizenz

Re: C++ und schon wieder eine Frage...

Beitrag von GoKi » 15.03.2009 12:41:56

Duff hat geschrieben:PS: Zu dem Klein-/Groß-Buchstaben in Klassennamen hattest du mir mal diesen Link hier gepostet. (MyClass)
Ja ich weiß. Deine Exception Klasse fängt jedoch mit einem Kleinbuchstaben an.

Die Kopie wird erstellt, sobald etwas per call-by-value aufgerufen wird.
z.B. auch http://nopaste.debianforum.de/19748
MfG GoKi
:wq

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Re: C++ und schon wieder eine Frage...

Beitrag von Duff » 15.03.2009 12:58:34

GoKi hat geschrieben:
Duff hat geschrieben:PS: Zu dem Klein-/Groß-Buchstaben in Klassennamen hattest du mir mal diesen Link hier gepostet. (MyClass)
Ja ich weiß. Deine Exception Klasse fängt jedoch mit einem Kleinbuchstaben an.
Hast recht. Aber in dem Buch wird irgendwie auch mal so und mal so geschrieben.
GoKi hat geschrieben: Die Kopie wird erstellt, sobald etwas per call-by-value aufgerufen wird.
z.B. auch http://nopaste.debianforum.de/19748
Ja, sehr interessant.
Soweit auch für mich veständlich.

Nur, warum benutzt du (void*)&adresse?
Man könnte doch auch &adresse schreiben.
Oh, yeah!

Benutzeravatar
GoKi
Beiträge: 2068
Registriert: 04.07.2003 23:08:56
Lizenz eigener Beiträge: MIT Lizenz

Re: C++ und schon wieder eine Frage...

Beitrag von GoKi » 15.03.2009 13:04:07

Duff hat geschrieben:Nur, warum benutzt du (void*)&adresse?
Man könnte doch auch &adresse schreiben.
Alte Gewohnheit... hat in diesem Fall keinen besonderen Grund.
MfG GoKi
:wq

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Re: C++ und schon wieder eine Frage...

Beitrag von Duff » 15.03.2009 13:08:04

Sieht für mich aber aus wie ein unabhängiger Zeiger (void*) auf eine Adresse &adresse.
Oh, yeah!

Antworten