Klassen und Vererbung

WorldRacer

Erfahrenes Mitglied
Hab da ne Frage zu folgendem Code:

Code:
class ListenElement
{
	friend class Liste;

private:
	ListenElement *previous;
	ListenElement *next;
	ListenElement(ListenElement *p=0, ListenElement *n=0) : previous(p), next(n){}
};
class IntElement : ListenElement
{
private:
	int data;
public:
	IntElement(int, ListenElement*, ListenElement*);
};

In der Vorletzten Zeile steht ListenElement*. Ein * Vor dem Variablennamen würde ja ein Pointer bedeuten, aber was heist das sternchen hinter dem namen
 
Nöö. Ein * nach der Typangabe bedeutet Zeiger. Ein * vor etwas bedeutet Dereferenzieren oder Multiplizieren ;)
 
Ein * Vor dem Variablennamen würde ja ein Pointer bedeuten, aber was heist das sternchen hinter dem namen
Es ist ein Zeiger. Das Sternchen steht auch nicht hinter dem Variablennamen, sondern hinter dem Typbezeichner. Es ist zulässig in Funktions/Methoden-Deklarationen oder -Köpfen den Variablennamen wegzulassen, wie das in deinem Codebeispiel geschehen ist.

Gruß
MCoder
 
@devDevil: ListenElement *previous; << dass heisst doch das previous ein zeiger vom Typ ListenElement is oder?

@MCoder: Kannst du mir das bitte genau erklären? Weil ich das mit dem Sternchen dahinter immer noch nich versteh. Mir ist klar dass

int funktion( int, long, char); zulässig wär.

Aber was würd es bedeuten wenn da

int funktion( int*, long*, char*); steht
 
Ach so,...

Also wenn ich es richtig verstehe sieht der kopf der implementierung dann anders aus odeR? Weil der compiler, bzw die funktion muss doch wissen welche variable er verwenden soll...
 
Der Compiler muss die Variable nur kennen, wenn im folgenden auch damit gearbeitet wird. Bei einer Deklaration ist nur der Typ entscheidend, daher kann man (muss man aber nicht) den Variablennamen weglassen. Aber Programmierer sind ja eher faul und nutzen jede Gelegenheit, sich etwas Schreibarbeit zu ersparen; siehe auch meine Signatur :-)

Gruß
MCoder
 
aso :)

Na denn also mal folgendes, um zu gucken ob ich es richtig verstanden hab:

Code:
//Deklaration:
int blah(int*);

^ ^ wär richtig

Code:
//Implementation:
int blah(int*) {
    //Anweisungen
return(0);
}

^ ^ wär falsch...

und wenn ich dann aufrufe mit dem Deklarationsteil:
Code:
int i=20;
int *z=&i;

blah(i);
//^ ^ wär falsch...

blah(z);
// ^ ^wär richtig...
 
Zuletzt bearbeitet:
Code:
//Implementation:
int blah(int*) {
    //Anweisungen
return(0);
}
Grundsätzlich nicht falsch, aber man tut sich natürlich ohne Variablennamen etwas schwer, den Parameter zu verwenden :-)
Falls man allerdings den Parameter tatsächlich braucht, kann man auch den Variablennamen weglassen, was einem unter Umständen obendrein lästige Compiler-Warnung "unused parameter ..." erspart. Solche Situationen enstehen, wenn z.B. Callback-Funktionen oder Eventhandler implementiert werden sollen, deren Parameter nicht immer alle benötigt werden.

Ansonsten alles richtig verstanden!

Gruß
MCoder
 
Cool thx, binsch also doch net sooo schwer von begriff ^^

Markiere das ding jetz mal als erledigt..wie es sich gehört *g*
 
Zurück