Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

franz-21

Treue Seele

  • »franz-21« ist der Autor dieses Themas

Beiträge: 101

Wohnort: Bayern

Beruf: Schüler

  • Private Nachricht senden

1

18.02.2010, 20:04

Klasseninstanz an das Ende eines Arrays übergeben

So, jetzt setzt meine Denkfähigkeit komplett aus.

Wie kann ich Instanzen einer Klasse, die in einer Memberfunktion einer Klasse definiert wurden, an das Ende eines Arrays übergeben, welches wieder einer anderen Klasse angehört? (geile Erklärung) :roll:

offizielle Aufgabenstellung:
m)Lege nun eine eigene Klasse Main mit der main() Methode an und definiere 2 Instanzen
der Klasse Mitglied in main().
n) Definiere eine weitere Klasse Verein. Diese hat als Instanzvariablen die Anzahl der
Mitglieder und ein Array aus Objekten der Klasse Mitglieder.
Hinweis: Das Array soll immer nur so groß sein wie Mitglieder eingetragen wurden.
o) Schreibe (in Verein) eine Methode add() mit der man ein (bereits instanziertes)
Objekt der Klasse Mitglied zum Verein hinzufügen kann (wird ans Ende des Arrays
kopiert).

da steh ich an:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class CMain{        
    public:
        void main();
};

void CMain::main(){
    
    CMitglieder *pMitglied = NULL;
    pMitglied = new CMitglieder[2];
}

class CVerein{

    public:
        void add();
};

void CVerein::add(){  }

Mastermind

unregistriert

2

18.02.2010, 20:08

Der Link hilft dir bestimmt:

http://www.parashift.com/c++-faq-lite/how-to-post.html#faq-5.2

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

3

18.02.2010, 20:12

woher hast du die aufgabe? das ist total unverständlich.
man instanziert ein objekt dort wo die adresse speichert und das objekt löscht.
schon allein deswegen ist diese aufgabenstellung eine sehr schlechte...

übrigens produzierst du hier ein speicherleak:

Quellcode

1
2
3
4
5
void CMain::main(){
   
    CMitglieder *pMitglied = NULL;
    pMitglied = new CMitglieder[2];
} 
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

franz-21

Treue Seele

  • »franz-21« ist der Autor dieses Themas

Beiträge: 101

Wohnort: Bayern

Beruf: Schüler

  • Private Nachricht senden

4

18.02.2010, 20:12

mhm, wo ist den diese Frage schon einmal gestellt worden??????

@NachoMan
Mein Lehrer hat sie mir gegeben.
Die Instanzen werden erst später mit delete gelöscht, wenn du das meinst

Mir kommt es so vor, das es besser und verständlicher wäre, wenn man die Klasse main weglässt und die Instanzen in Verein erzeugt.
Und für die Fragenstellung o habe ich überhaupt keinen vernünftigen Ansatz. Man könnte es z.B. mit Vektoren einfach lösen. Mit einer Arraylösung fällt mir nur das Schlüsselwort new ein, um dynamisch zu bleiben, nur weis ich nicht wie das funktionieren soll, ein BEREITS instanziertes Objekt an ein dynamisches Array zuzufügen.
Geht das überhaupt?

franz-21

Treue Seele

  • »franz-21« ist der Autor dieses Themas

Beiträge: 101

Wohnort: Bayern

Beruf: Schüler

  • Private Nachricht senden

5

18.02.2010, 21:01

kann mir keiner helfen? :(

6

18.02.2010, 21:15

Ich würde es mit einem Vector machen, wenn du das schon kannst. Außerdem will hier niemand deine Hausaufgaben machen.

Vielleicht versuchst du es erstmal und gibst nicht nur leere Pseudocode.

franz-21

Treue Seele

  • »franz-21« ist der Autor dieses Themas

Beiträge: 101

Wohnort: Bayern

Beruf: Schüler

  • Private Nachricht senden

7

18.02.2010, 21:20

ja, ist keine HÜ, sondern Übung. Bin erst in einer 1.Klasse und kann schon ziemlich viel für so einen "Jahrlig" :D Und da das Buch was ich gerade lese nicht so viele Übungsbeispiele für dieses Thema besitzt, habe ich den Lehrer eine Mail geschrieben obe er mir nicht eine Paar Übungen schicken könnte, das einige von den Fragestellungen so overkill mäßig sind habe ich nicht gewusst. Für die Frage o habe ich gar keine Vorstellung und bin schon sehr nahe den Lehrer um die Lösung zu fragen.

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

8

18.02.2010, 21:22

ich weiß nicht was der lehrer sich dabei denkt.
darfst du std::vector benutzen? wenn nicht musst du dir ein add-funktion schreiben die den inhalt des alten arrays in ein neues, größeres array kopiert.
ich würde einen zeiger auf das array und die größe des arrays in der klasse verein speichern. im destruktor wird der komplette speicher frei gegeben und nirgenswo anders als in der klasse darf sowas wie "new CMitglieder..." stehen.

jetzt hab ich verstanden was dein lehrer wollte. du sollst der funktion eine instanz von CMitglieder übergeben und in das letzte(und neue) element kopieren... das sollte mit dem zuweisungsoperator gehen.

du sollst das so schreiben können:

Quellcode

1
verein.add(CMitglied(wert));


du hast mich mit deinem new verwirrt sry xD
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

franz-21

Treue Seele

  • »franz-21« ist der Autor dieses Themas

Beiträge: 101

Wohnort: Bayern

Beruf: Schüler

  • Private Nachricht senden

9

18.02.2010, 21:32

darf keine vektoren benutzen, nur was da steht. Für was steht wert in verein.add(CMitglied(wert));? Blick da noch immer nicht ganz durch. :x

Fragestellungen:
Lege nun eine eigene Klasse Main mit der main() Methode an und definiere 2 Instanzen
der Klasse Mitglied in main().

Hab ich so gemacht:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
class CMain{        

    public:
        void main();
};

void CMain::main(){
    
    CMitglieder Mitglied1;
    CMitglieder Mitglied2;
}


Definiere eine weitere Klasse Verein. Diese hat als Instanzvariablen die Anzahl der
Mitglieder und ein Array aus Objekten der Klasse Mitglieder.
Hinweis: Das Array soll immer nur so groß sein wie Mitglieder eingetragen wurden.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
class Verein{

    private:
        CMitglieder m_Array[2];
        int m_iAnzahl;

    public:
        void add(???);
};


Schreibe (in Verein) eine Methode add() mit der man ein (bereits instanziertes)
Objekt der Klasse Mitglied zum Verein hinzufügen kann (wird ans Ende des Arrays
kopiert).

C-/C++-Quelltext

1
2
3
4
5
void Verein::add(???){

    for(int i=0; i<m_iAnzahl; i++){
        //checks nicht mehr

}

Und hier hängts komplett. Muss ich immer ein neues Array erstellen welches um 1 größer als das alte ist und alles reinkopieren?[/code]

10

18.02.2010, 22:48

Ich probiere es gerade selbst, aber ka warum es bei mir nicht geht ^^ Mit STL bin ich schon seit einer Stunde fertig lol

Ich bin schon bei Variante 2, aber ich bekomms halt nicht gebacken :D

Also du musst folgendes machen:

1. array in new tmp array speichern
2. array löschen
3. new array (size +1)
4 tmp array in new array kopieren
5. tmp array löschen
6. objekt in new array

Bei mir meckerts halt egal was ich mache, daran, dass er meint es gibt kein default konstruktor... Ich mache gerade ein paar Pointerfehler :P

Werbeanzeige