www.vorhilfe.de
Vorhilfe

Kostenlose Kommunikationsplattform für gegenseitige Hilfestellungen.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Englisch
  Status Grammatik
  Status Lektüre
  Status Korrekturlesen
  Status Übersetzung
  Status Sonstiges (Englisch)

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "C/C++" - Liste als Klasse
Liste als Klasse < C/C++ < Programmiersprachen < Praxis < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "C/C++"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Liste als Klasse: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 14:35 Sa 23.01.2010
Autor: nana

Hallo, folgendes Programm hatten wir in der Vorlesung; ich versteh es auch eig , hab aber ein paar Fragen zu den Funktionen...hoffe ihr könnt mir helfen

hier erstmal die Def der Klasse CList (nur weil man sonst die funktionsparameter nicht so ganz versteht):

class CList {
private:
struct CListElement {
   int digit;
   CListElement* next;
   CListElement(int d, CListElement* n) {
       digit = d; next = n;}
};
/* doch eine Frage: eig ist CListElement doch ein struct, aber hier ist ein Konstruktor drin, oder gibt es die auch in structs??*/
CListElement* head;
};

CList(){ head =NULL;};
// falls liste erst neu erstellt werden muss
void CList::cinsertTop (int r) {
head = new CListElement(r,head);
}
/*Das verstehe ich nicht so ganz: also das neue El, das oben eingefügt werden soll hat den wert r und der zeiger ist head, das ist klar, aber head ist doch eigentlich der zeiger der liste der immer auf das erste el zeigen soll, aber head wurde ja gar nicht verändert (muss head dann nicht auch als referenzparameter üebrgeben werden)??  */

Zum Finden eines El:

bool CList::cfind ( int r) {
if (head == NULL){
return false;
}
else {
/*l wird zum Durchlauf
verwendet*/
CListElement* l = head;
while ((l != NULL) &&(l->digit != r)) {
l = l->next;
};
return (l != NULL);
}
}
/*ich versteh dieses programm bis auf den schluss: was bedeutet "return (l!= NULL)" in diesem Zusammenhang??  */

Vielen Dank für alle Antworten,
lg, nana

        
Bezug
Liste als Klasse: Antwort
Status: (Antwort) fertig Status 
Datum: 15:35 Sa 23.01.2010
Autor: Karl_Pech

Hallo nochmal nana,


> class CList {
>  private:
>   struct CListElement {
>     int digit;
>     CListElement* next;
>     CListElement(int d, CListElement* n) {
>         digit = d; next = n;}
>   };
>  /* doch eine Frage: eig ist CListElement doch ein struct,
> aber hier ist ein Konstruktor drin, oder gibt es die auch
> in structs??*/


Das war jetzt auch für mich neu. Aber offenbar haben structs in C++ im Vergleich zu C eine etwas andere Bedeutung: [][guckstduhier].


>  void CList::cinsertTop (int r) {
>  head = new CListElement(r,head);
>  }
>  /*Das verstehe ich nicht so ganz: also das neue El, das
> oben eingefügt werden soll hat den wert r und der zeiger
> ist head, das ist klar, aber head ist doch eigentlich der
> zeiger der liste der immer auf das erste el zeigen soll,
> aber head wurde ja gar nicht verändert (muss head dann
> nicht auch als referenzparameter üebrgeben werden)??  */


Mir ist die Frage nicht ganz klar, weil 'head' doch als Parameter übergeben wird. Am Anfang ist head == NULL. Jetzt rufen wir mal cinsertTop(0) auf. Dann wird auf dem Heap ein neues Objekt vom Typ 'CListElement' erstellt. Bei der Erstellung werden an den Konstruktor dieses Objektes 0 und NULL übergeben: new CListElement(r,head). Im Konstruktor-Rumpf werden die internen Variablen digit und next dieses neuen Objektes/Listenelementes gesetzt. Danach springt das Programm zurück zu cInsertTop. Das fertig erstelle Listenelement wird nun der internen Variablen head zugewiesen. Das Ergebnis sieht so aus:


head -> |0|.next == NULL


Beim nochmaligen Aufruf von cinsertTop() wird nun der neue Wert von head an den Konstruktor CListElement für ein neues Listenelement übergeben:


head -> |1|.next -> |0|.next == NULL


>  return (l != NULL);
>  /*ich versteh dieses programm bis auf den schluss: was
> bedeutet "return (l!= NULL)" in diesem Zusammenhang??  */


Ist l ungleich NULL, d.h. wurde das Element gefunden, ergibt der Ausdruck (l != NULL) den Wert 'true'. Ansonsten ist der Ausdruck 'false'. Bei if-Abfragen benutzt du ja auch ständig solche Klammerausdrücke: if(l != NULL); Warum also nicht auch return(l != NULL)? ;-)



Viele Grüße
Karl




Bezug
                
Bezug
Liste als Klasse: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 22:10 Mi 03.02.2010
Autor: nana

Hey vielen Dank!!
(zum wiederholten Mal ;) )
für die Hilfe, habs jetzt verstanden, obwohl ich zugeben muss dass ich noch ein paar kleine verständnisprobleme hab bzgl benutzung von referenzparametern bei einer klasse list oder so ....
Aber auf jeden Fall danke...
Lg, nana

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "C/C++"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.englischraum.de
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]