Programmieren - alles kontrollieren 4.934 Themen, 20.613 Beiträge

c++: frage zu arrays

Yves3 / 11 Antworten / Flachansicht Nickles

hallo


ich hab mal wieder eine frage zu c++ ;-) der erste quellcode ist aus meinem programmierbuch. warum wird dort der zeiger "pCat" verwendet? was ist an meiner lösung(source 2) anders? warum wurde das im buch nicht so gelöst?


danke für alle antworten!


<b>source 1:</b>


#include <iostream.h>


class CAT
{
public:
 CAT() { itsAge = 1; itsWeight = 5; }
 ~CAT();
 int GetAge() const { return itsAge; }
 int GetWeight() const { return itsWeight; }
 void SetAge(int age) { itsAge = age; }


private:
 int itsAge;
 int itsWeight;
};


CAT::~CAT()
{
// cout << "Destruktor aufgerufen!\n";
}


int main()
{
 CAT * Family = new CAT[500];
 int i;
 CAT * pCat;
 <b> 


for(i = 0; i<500 ; i++)
 {
  pCat = new CAT;
  pCat->SetAge(2*i +1);
  Family[i] = *pCat;
  delete pCat;
 }</b>


 for(i = 0; i<500; i++)
  cout << "Katze#" << (i+1) << ": " << Family[i].GetAge() << endl;


 delete [] Family;


 return 0;
}


<b>source 2</b>


#include <iostream.h>


class CAT
{
public:
 CAT() { itsAge = 1; itsWeight = 5; }
 ~CAT();
 int GetAge() const { return itsAge; }
 int GetWeight() const { return itsWeight; }
 void SetAge(int age) { itsAge = age; }


private:
 int itsAge;
 int itsWeight;
};


CAT::~CAT()
{
// cout << "Destruktor aufgerufen!\n";
}


int main()
{
 CAT * Family = new CAT[500];
 int i;
 <b>
 for(i = 0; i<500 ; i++)
 {


  Family[i].SetAge(2*i +1);


 }</b>


 for(i = 0; i<500; i++)
  cout << "Katze#" << (i+1) << ": " << Family[i].GetAge() << endl;


 delete [] Family;


 return 0;
}

bei Antwort benachrichtigen
Kleine Ergänzung vergisses
Kleine Ergänzung Yves3
Kleine Ergänzung mr.escape
Kleine Ergänzung Yves3
Kleine Ergänzung vergisses
Kleine Ergänzung mr.escape
vergisses Nachtrag zu: „Kleine Ergänzung“
Optionen

Hallo Leute,

Ihr habt Recht, bitte um Vergebung....

Hier das Testprogramm.
-----------schnipp------------------
#include

class CAT
{
public:
CAT() { itsAge = 0; itsWeight = 0; }
~CAT();
int GetAge() const { return itsAge; }
int GetWeight() const { return itsWeight; }
void SetAge(int age) { itsAge = age; }
void SetWeight(int weight) { itsWeight = weight; }
void print();

private:
int itsAge;
int itsWeight;
};


CAT::~CAT()
{
printf("Destruktor aufgerufen!\\n");
}

void CAT::print()
{
printf("Age=%d:Weight=%d:this=%ld:Adress GetAge=%ld\\n"
,itsAge,itsWeight,this,GetAge);
}


int main()
{
CAT a,b;
a.print();
b.print();
a.SetAge(1);
a.SetWeight(1);
b.SetAge(2);
b.SetWeight(2);
a.print();
b.print();
a=b;
printf("Mal sehen\\n");
a.print();
b.print();

return 0;
}

-----------schnipp------------------
und hier die Ausgaben
-----------schnipp------------------
Age=0:Weight=0:this=1245036:Adress GetAge=4198435
Age=0:Weight=0:this=1245028:Adress GetAge=4198435
Age=1:Weight=1:this=1245036:Adress GetAge=4198435
Age=2:Weight=2:this=1245028:Adress GetAge=4198435
Mal sehen
Age=2:Weight=2:this=1245036:Adress GetAge=4198435
Age=2:Weight=2:this=1245028:Adress GetAge=4198435
Destruktor aufgerufen!
Destruktor aufgerufen!
-----------schnipp------------------
Die Ausgabe von this belegt einwandfrei, dass es
wirklich 2 Objekte sind.
Die einfache Zuweisung hat zum Kopieren ausgereicht.
Interessanterweise existieren die Klassenmethoden aber nur
einmal im Speicher.
Ich muss zugeben, dass ich mehr in C als in C++ Zuhause bin...

Gruss, vergisses

bei Antwort benachrichtigen
Kleine Ergänzung mr.escape
Kleine Ergänzung vergisses