klassen, new, konstruktoren und andere grausamkeiten

Antworten
Benutzeravatar
petite souris
Kampfknödel
Beiträge: 46
Registriert: 11.10.2006, 17:03

klassen, new, konstruktoren und andere grausamkeiten

Beitrag von petite souris »

eijeijei

ich hab da mal so a programm zu dem themaschreiben wollen, damit ich mir das ein bisschen besser vorstellen kann. weil die letzte stunde war ja schon hart. (naja i schreib halt über a katzerl hab i ma dacht, dass kann i ma gut vorstellen.. )

aber jetzt häng i dann so vom verständnis wo. und zwar dachte ich mir, dass ich das vielleicht wohl besser mit new (also passendem Speicherplatzreservieren) und pointern vielleicht mach.. aber ich hab echt ka ahnung wie.

falls wer zeit hat mir das zu erklären, wär nett wenn ihr des ausführlich macht damit i net noch mehr verwirrt bin..

Code: Alles auswählen


//Konstruktor und Destruktor

#include <iostream.h>

class Cat
{
      public:
             Cat(int initialAge);               //Konstruktor
             ~Cat();                            //Destruktor
             
             int GetAge();                      //Zugriffsfunktion
             void SetAge(int A);               //Zugriffsfunktion
             void Meow();
             
      private:
              int itsAge;
};

  Cat::Cat(int initialAge)          
  { itsAge = initialAge; }

  Cat::~Cat()                                    
  {}

  int Cat::GetAge()
  { return itsAge; }
  
  void Cat::SetAge(int A)
  { itsAge = A; }
  
  void Cat::Meow()
  { cout << "Miau!\n"; }


int main()
{
    Cat strewner(5);
    strewner.Meow();
    cout << "strewner ist " << strewner.GetAge() << "Jahre alt.\n";
    
    strewner.SetAge(7);
    cout << "Jetzt ist strewner" << strewner.GetAge() << "Jahre alt.\n";
    
    return 0;
}

mag auch sein das andere fehler drinnen sind, also mir bitte dann sagen :)

lg
:shock: me pinky - not brain

Benutzeravatar
petite souris
Kampfknödel
Beiträge: 46
Registriert: 11.10.2006, 17:03

Beitrag von petite souris »

sags amal hat keiner bock mir zu helfen oder is das zu unverständlich was ich eigentlich nur wissen möcht??
:shock: me pinky - not brain

Benutzeravatar
ibi
Dr. h.c.
Beiträge: 443
Registriert: 12.10.2006, 20:34
Wohnort: Kagran / Donaustadt

Beitrag von ibi »

Hmm ...

Code: Alles auswählen

seppi@server1:~/pipe$ make cat
g++     cat.cpp   -o cat
In file included from /usr/lib/gcc/i486-linux-gnu/4.0.3/../../../../include/c++/4.0.3/backward/iostream.h:31,
                 from cat.cpp:3:
/usr/lib/gcc/i486-linux-gnu/4.0.3/../../../../include/c++/4.0.3/backward/backward_warning.h:32:2: warning: #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <iostream> instead of the deprecated header <iostream.h>. To disable this warning use -Wno-deprecated.
seppi@server1:~/pipe$
--> Ersetze #include <iostream.h> durch #include <iostream>

Code: Alles auswählen

seppi@server1:~/pipe$ make cat
g++     cat.cpp   -o cat
cat.cpp: In member function ‘void Cat::Meow()’:
cat.cpp:32: error: ‘cout’ was not declared in this scope
cat.cpp: In function ‘int main()’:
cat.cpp:39: error: ‘cout’ was not declared in this scope
make: *** [cat] Error 1
seppi@server1:~/pipe$
--> cout ist im namespace std, Du mußt also std::cout oder ganz am Anfang using namespace std; schreiben.

Code: Alles auswählen

seppi@server1:~/pipe$ make cat
g++     cat.cpp   -o cat
seppi@server1:~/pipe$ ./cat
Miau!
strewner ist 5Jahre alt.
Jetzt ist strewner7Jahre alt.
seppi@server1:~/pipe$
Jetzt scheints zu klappen.

Was Deine Frage betrifft:
Wenn ich das richtig verstanden habe, willst Du hier "new" und Pointer einbauen. Ich weiß nur nicht so recht, wo man das hier sinnvoll einbindet.
Ich überleg mir mal was. ;-)

Benutzeravatar
ibi
Dr. h.c.
Beiträge: 443
Registriert: 12.10.2006, 20:34
Wohnort: Kagran / Donaustadt

Beitrag von ibi »

Meinst Du sowas?

Code: Alles auswählen

//Konstruktor und Destruktor mit new und delete

#include <iostream>

using namespace std;

class Cat
{
      public:
             Cat(int initialAge);               //Konstruktor
             ~Cat();                            //Destruktor
             
             int GetAge();                      //Zugriffsfunktion
             void SetAge(int A);               //Zugriffsfunktion
             void Meow();
             
      private:
              int itsAge;
};

  Cat::Cat(int initialAge)         
  { itsAge = initialAge; }

  Cat::~Cat()                                   
  { cout << "Cat deleted.\n"; }

  int Cat::GetAge()
  { return itsAge; }
 
  void Cat::SetAge(int A)
  { itsAge = A; }
 
  void Cat::Meow()
  { cout << "Miau!\n"; }


int main()
{
    Cat *strewner; // Pointer auf Cat wird angelegt.
    strewner = new Cat(5); // Neue Katze "strewner" --> Konstruktor aufgerufen
    strewner->Meow(); // -> statt . weil strewner ein Pointer ist.
    cout << "strewner ist " << strewner->GetAge() << " Jahre alt.\n";
   
    strewner->SetAge(7);
    cout << "Jetzt ist strewner " << strewner->GetAge() << " Jahre alt.\n";
    delete strewner; // Katze wird wieder entfernt.
    
    return 0;
}

Benutzeravatar
petite souris
Kampfknödel
Beiträge: 46
Registriert: 11.10.2006, 17:03

Beitrag von petite souris »

zu meinen fehlern,

mein compiler hat die headerdatei iostream.h also binde ich die auch ein, andere findet er nicht,
das mit cout geht bei mir aus so, auf uni würd ichs aber auch anders schreiben...

deinen vorschlag muss i mir jetzt noch durchlesen.
:shock: me pinky - not brain

Benutzeravatar
petite souris
Kampfknödel
Beiträge: 46
Registriert: 11.10.2006, 17:03

Beitrag von petite souris »

aha mit -> geht das
hab ich nicht gewusst

also danke dir auf jeden fall, sowas in etwa hab ich auch versucht zu machen :) danke
:shock: me pinky - not brain

Velociraptor
Beiträge: 42
Registriert: 10.10.2006, 18:52
Wohnort: Zuhause
Kontaktdaten:

Beitrag von Velociraptor »

oder du machst statt
ibi hat geschrieben:...
strewner->Meow(); // -> statt . weil strewner ein Pointer ist.
...

Code: Alles auswählen

(*strewner).Meow();
glaub ich da schreibst den pointer halt aus :?
Zuletzt geändert von Velociraptor am 12.12.2006, 21:51, insgesamt 1-mal geändert.

Benutzeravatar
ibi
Dr. h.c.
Beiträge: 443
Registriert: 12.10.2006, 20:34
Wohnort: Kagran / Donaustadt

Beitrag von ibi »

Velociraptor hat geschrieben:

Code: Alles auswählen

(*strewner).Meow();
Das geht natürlich auch, is aber nicht so elegant. ;)

Velociraptor
Beiträge: 42
Registriert: 10.10.2006, 18:52
Wohnort: Zuhause
Kontaktdaten:

Beitrag von Velociraptor »

ja aber ich find wenn man beides weis dann versteht mas leichter was das eine sein soll ;)

Benutzeravatar
ibi
Dr. h.c.
Beiträge: 443
Registriert: 12.10.2006, 20:34
Wohnort: Kagran / Donaustadt

Beitrag von ibi »

Ja, der -> ist zugegebenermaßen nicht gerade intuitiv.
Müßt ihr zum Test eigentlich C++ können? Bei uns kommt das garned ...

Benutzeravatar
petite souris
Kampfknödel
Beiträge: 46
Registriert: 11.10.2006, 17:03

Beitrag von petite souris »

nein nein, is nur C als stoff. aber ich muss sagen, c++ is scho a stückerl anspruchsvoller...
also ganz checken tu ich das mit klassen und wie ich die methoden da drinnen schreib noch net. bin no relativ konfus zeitweise unterwegs is mir heut beim programmieren von unserem jetzigen übungsbeispiel aufgefallen.
:shock: me pinky - not brain

Benutzeravatar
ibi
Dr. h.c.
Beiträge: 443
Registriert: 12.10.2006, 20:34
Wohnort: Kagran / Donaustadt

Beitrag von ibi »

Ja, das ist schon klar, daß das nicht sofort im Kopf ist. Es ist auch eine ganz andere Denkweise als beim "normalen" Programmieren.
Es geht sicher vielen nicht anders, und ich muß auch überlegen, damit mir wieder alles einfällt, was wie in Dat machen.

Antworten

Zurück zu „Datenverarbeitung für Physiker I“