Fragen zu C++ (-code)

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

Fragen zu C++ (-code)

Beitrag von Duff » 08.02.2008 15:24:20

Hallo,

bin nun wieder dabei (nach längerer Pause) mich mit der Programmiersprache C++ zu beschäftigen.

Doch leider trete ich schon wieder auf Verständnisprobleme bei der genauen Bedeutung folgendem Code-Ausschnitts:

Code: Alles auswählen

class A {
private:
  int ival;
public:
  A(int val=0):ival(val){}
  // Den oberen Konstruktor verstehe ich schon nicht so ganz
  // was bedeutet das :ival(val)?

  ~A(){}
  A(const A& Aobj) {
    ival=Aobj.ival;
  }
  // Diesen "Kopierkonstruktor verstehe ich leider auch nicht genau
  // Ist hier z.B. mit A& eine Referenz gemeint? 
  // Wie der gesamte Zusammenhang hier zu vestehen
....
}
Habe mal die Fragen direkt in den Code geschrieben.

Wäre über Antworten dankbar.
Oh, yeah!

Benutzeravatar
armin
Beiträge: 2682
Registriert: 17.03.2005 11:49:14

Beitrag von armin » 08.02.2008 16:08:44

Zur ersten Frage:
Man könnte auch einfach "ival=val" schreiben. Sieh es einfach als Abkürzung.

Wie du schon fest gestellt hast handelt es sich hier um einen Copy-Konstruktor. Du bekommst hierbei eine REferenz auf das Objekt übergeben, dass du kopieren willst. Was du dann mit diesem machst ist deine Sache.
Wann ein Copy-Konstruktor genutzt wird weißt du?
Formerly known as Trigger.
HP 8510p - Debian Sid
Mitglied des Debian-KDE-Teams

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

Beitrag von Duff » 08.02.2008 16:28:55

Erstmal danke für deine schnelle Antwort.

Heißt dass obere jetzt, dass ich einen Konstruktor habe um ein Objekt anzulegen, welches zwei Werte hat die beide gleich sind?


...bin irgendwie ein wenig verwirrt und habe das Gefühl, dass ich von den ca. 500 gelesenen Seiten nicht mehr wirklich viel behalten habe.
Oh, yeah!

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

Beitrag von GoKi » 08.02.2008 20:15:46

Duff hat geschrieben:Heißt dass obere jetzt, dass ich einen Konstruktor habe um ein Objekt anzulegen, welches zwei Werte hat die beide gleich sind?
Bin jetzt nicht sicher, ob ich dich richtig verstehe.
Aber was Trigger. meint ist folgendes:

Code: Alles auswählen

class A {
private:
  int ival;
public:
  A(int val=0):ival(val){}
};
erzielt (bis auf eine Kleinigkeit, die wir hier jetzt mal ignorieren) das gleiche Ergebnis wie

Code: Alles auswählen

class A {
private:
  int ival;
public:
  A(int val=0) {ival = val;}
};
Du kannst also über den Konstruktor den Wert der Membervariablen ival setzen.

Code: Alles auswählen

A a(5);
Die Verwendung der Initialisierungsliste (der Kram hinter dem Doppelpunkt) ist sinnvoll, da somit nur einmal auf den Speicher zugegriffen werden muss. Des Weiteren ist es unter Umständen auch notwendig die Initialisierung der Member in der Initialisierungsliste vorzunehmen und nicht im Methoden-Rumpf des Konstruktors. Innerhalb der Initialisierungsliste können auch Konstanten und Referenzen initialisiert werden, dies ist innerhalb der Methode nicht möglich.
MfG GoKi
:wq

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

Beitrag von Duff » 09.02.2008 11:04:15

Ok, danke.

Ich denke, dass ich wohl doch nochmal ein paar grundlegende Sachen durchnehmen sollte.
Gibt es sowas auch in "Kurzform" im Internet?
Oh, yeah!

Antworten