OOP & Datenstrukturen bzw. Datenschnittstellen

toxrocks

Grünschnabel
Hallo zusammen,

bin nicht so fit, was OOP betrifft und habe gerade ein grundlegendes Verständnisproblem.

Ich schreibe an einem C++/Qt-Programm, mit dem man Daten in Form von Listen ablegt und diese bearbeiten soll. Solange ich mit meinen Daten in einer Klasse arbeite, in der ich diese erschaffen habe, geht das auch alles. Wenn ich diese Daten aber für anderen Klassen zur Verfügung stellen möchte, dann breche ich mir immer einen ab.

Wie macht man das nun sauber?

Dachte mir, ich schreibe ein Klasse (MyContainer), in der ich meine Variablen / Listen ebenfalls erschaffe und in der Funktionen stehen, mit denen ich die Daten in der Klasse A (wo die Daten erschaffen wurden) an meine MyContainer übertrage, dort werden sie gespeichert und wer dann wieder auf diese Daten zugreifen möchte, erschafft ein Objekt der Klasse, zB.

Code:
MyContainer giver;

und fordert sie an. Sieht dann so aus:

HEADER
Code:
#ifndef MYCONTAINER_H
#define MYCONTAINER_H

#include "candata.h"
#include <qlistview.h>

class MyContainer  
{
public:
	MyContainer();
	~MyContainer();
	QPtrList<CanData> getPtrList();
	void givePtrList(QPtrList<CanData>);
	QListView getInputListView();
	void giveInputListView(QListView*);
	QListView getOutputListView();
	void giveOutputListView(QListView*);


private:
	QPtrList<CanData> canDataList;
	QListView *inputListView;
	QListView *outputListView;

};

#endif

myheader.cpp
Code:
#include "mycontainer.h"
MyContainer::MyContainer()
{

}

MyContainer::~MyContainer()
{

}

QPtrList<CanData> MyContainer::getPtrList()
{
	return canDataList;
}

void MyContainer::givePtrList(QPtrList<CanData> list)
{
	canDataList=list;
}

QListView MyContainer::getInputListView()
{
	return *inputListView;
}

void MyContainer::giveInputListView(QListView *list)
{
	inputListView=list;
}

QListView MyContainer::getOutputListView()
{
	return *outputListView;
}

void MyContainer::giveOutputListView(QListView *list)
{
	outputListView=list;
}

Bin mir jetzt aber nicht sicher, ob das so geht oder ob die Daten, sobald aus der Klasse rausgesprungen wird, in der das MyContainer entry; geschaffen wurde, auch meine Daten in MyContainer verloren gehen.

Wie macht man das generell mit Datentransfer? Nur über Funktionen mit Return ist doch irgendwie zu kompliziert, oder?

Gruß, Toxrocks
 
Bin mir zwar nich sicher was genau du jetzt wissen willst aber...

Zugriff auf Klassenmeber erlangst du mit dem "." Operator
also z.B, wenn in deiner Klasse ein public int nummer; steht
gelangst du mit MyContainer.nummer darauf Zugriff
bzw. wenn du einen pointer auf die klasse verwendest kannst du statt
(*Mycontainer).nummer auch MyContainer->nummer verwenden.

Grundsätzlich kann ich dir folgende Seite dazu empfehlen, da steht alles nötige drin:

http://www.cpp-tutor.de/cpp/toc.htm
(Lerneinheit 9 -11 )
 
Hi,

warum machst Du das ganze nicht global? Deklariere ausserhalb einer Funktion z.B. in der main.cpp einen Zeiger oder gar eine Instanz auf/von Deiner Liste. Dann kannst Du von überall darauf zugreifen.
Z.B.:
Code:
QPtrList<CanData> canDataList;


void DoSomething( QPtrList<CanData>& list ){ //Call by reference
.
.
.
}

int main(){
.
.
 DoSomething( canDataList );
.
return 0;
}


Gruss TB
 
Zurück