C++ Objekte Speichern

janosch

Erfahrenes Mitglied
C++ Objekte Speichern(nicht erledigt)

Moin!

Kurz und bündig. Wie kann ich unter C++ objekte in ein Array(besser dyn. liste) Speichern?
Beispiel: Klasse A soll die möglichkeit haben Objekte von der klasse B zu Speichern.
Wie mache ich das?

mfg
janosch

P.S. Beispiel Code würde mir echt weiter helfen.
 
Zuletzt bearbeitet:
Zum Beispiel mit einem vector aus Zeigern auf Objekte der Klasse B.
Muss man halt drauf achten, dass jedes Objekt zerstört wird, wenn man es aus seinem vector rauspfuscht oder wenn der Destruktor aufgerufen wird.
 
ich würde das so machen (wie beichtpfarrer):

Code:
class KlasseB
{
KlasseA *item;		//Pointer auf element
KlasseB *next;		//Pointer auf nächstes Kettenglied

...
};

class KlasseC
{
KlasseB *current; 	//pointer auf aktuelles element
KlasseB *p;
int count;		//Anzahl der Elemente

klasseC()
	{
	current=NULL;	
	count=0;
	}

void AddItem(KlasseA *item)
	{
	p = new KlasseB;
	p->item=item;
	if(count>1)
		p->next=current;
	else
		p->next=item;	
          current=p;	
          }
void delItem();		//noch zu machen 
void GetAt();		//noch zu machen 
...

};
is nur der Ansatz.Nicht fertig!

PS:Habe den Code aus dem Kopf geschrieben, dh kann Fehler haben.


Col.Blake
 
Zuletzt bearbeitet:
Aus dem Kopf geschriebener z. T. überprüfter Code:

Code:
template <class any>void swap(any* x, any* y)
{any z = *x; *x = *y; *y = z;}
 
#define Max 256
class TObjList
{
protected:
void* Data[Max];
int Count;
public:
int GetCount(void) {return Count;};
void* Get(int Index) {return Data[Index];};
void Add(void* Obj) {Data[Count] = Obj;Count++;};
int Search(void* Obj) {for(int i=0;i<Count;i++) if(Obj == Data[i]) return i; return -1;};
void Delete(int Index) {delete Data[Index];}; // Noch zu verbessern
void DelLast(void) {Count--;delete Data[Count];};
void swap(int x, int y) {::swap(&Data[x], &Data[y]);};
TObjList(void) {Count = 0;};
};
Man muss hier und da noch ein paar Kontrollen einbauen, aber sonst gehts (bis auf delete)!
PS. Beispielcode post ich später
 
Zuletzt bearbeitet:
Hier das versprochene bsp:
Code:
#include <iostream>
#include <conio>
using namespace std;
// vorher noch die def einfügen
class x {int a;char* b;};
int main(int argc, char* argv[])
{
TObjList* l = new TObjList;
x* z = new x;
z->a = 5;
z->b = "hi";
l->Add(z);
// Jetzt kannst du mit TObjList::Get auf das Objekt zugreifen
delete l;
getch();
}
 
Hallo!

Mit der list Klasse aus der STL gehts auch:
(Ausprobiert mit Visual C++ 6.0)
Code:
#include <list>
#include <iostream>

using namespace std;

class B {
int val;
public:
	B(int v){this->val = v;};
	~B(){};
	int getVal(){return this->val;};
};

class A {
list<B> list; 
public:
	A(){};
	~A(){};
	list<B> getListOfB(){return this->list;};
};

int main(int argc, char* argv[])
{
	A a;

	B* b0 = new B(0);
	B* b1 = new B(1231);
	B* b2 = new B(24);
	B* b3 = new B(3123);

	list<B> bList = a.getListOfB();
	bList.push_back((*b0));
	bList.push_back((*b1));
	bList.push_back((*b2));
	bList.push_back((*b3));

	cout << "Listeninhalt: " << endl;

	list<B>::iterator iter;
	
	for(iter=bList.begin(); iter != bList.end();++iter){
		cout << (*iter).getVal() << endl;
	}
	

	delete b0;
	delete b1;
	delete b2;
	delete b3;


	return 0;
}

HTH
Gruß Tom
 
Moin!

THX for help erstmal :D

Habe noch ne Frage. Wenn ich jetzt z.b sagen wir mal ein DB von 20 X Objekten angelegt habe und ich z.B. an dem Eintrage Nr. sagen wir mal 5 die var3(Konstruktor X hat die Übergabevariablen: V1, V2, V3) nicht nur mit einem Wert sondern mit beliebig vielen werten belegen will. Wie mache ich das? Ich habe mir überlegt das ich die var3 im Objekt X als array anlege nur wie übergebe ich dann n Werte and das X Objekt so das die Datenmenge minimal ist.

Würde dies auch gehen, wenn ich z.b. die X Objekte auf die V2 überprüfe (sofern möglich) und bei gleichen Objekten nur die V3 in das gleiche Objekt neu anlege?
Welche Techniken gibt es da in C++?


mfg janosch
 
erstmal kapier ich nix(!) :confused:
wenn du einer funk ein array übergeben willst, look a mol:
Code:
void MachZehn(int a[10])
{
for(int i=0;i<10;i++)
 a[i] = rand() % 10;
}
//Aufruf
int zehn[10];
MachZehn(zehn);
 
Zurück