Thread View: de.comp.lang.c++
3 messages
3 total messages
Started by Joachim Gudermann
Thu, 22 Feb 1996 13:37
Datenkapselung
Author: Joachim Gudermann
Date: Thu, 22 Feb 1996 13:37
Date: Thu, 22 Feb 1996 13:37
40 lines
1327 bytes
1327 bytes
Hallo C++ler!
Ich habe folgendes Problem:
class XXX
...
public:
void PutData(???);
....
protected:
Struktur1* theStruct1Dat;
Struktur2* theStruct2Dat;
Strukturn* theStructnDat;
...
Struktur1-3 sind vorher per typdef definiert worden und enthalten
unterschiedlich viele Variablen von Typ BOOLEAN (short int) und char[10].
Um jetzt aus anderen Modulen Daten dieser Strukturen zu veraendern, soll
ausschliesslich die Funtion PutData verwendet werden.
Dieser werden als Parameter mitgeteilt,
welche Struktur zu aendern ist,
welches Element zu aendern ist,
der neue Wert.
Nur laesst sich nicht sagen, von welchem Typ die Parameter jeweils sind.
Muss ich jetzt verschiedene PutData-Funktionen schreiben, oder lassen sich
alle Faelle mit einer Funktion erschlagen?
Bis denne,
Joachim
--
"Gotta make a million doesn't matter who dies."
Queensryche - Revolution calling
Re: Datenkapselung
Author: Watson
Date: Fri, 23 Feb 1996 18:00
Date: Fri, 23 Feb 1996 18:00
67 lines
2569 bytes
2569 bytes
Joachim Gudermann wrote:
> class XXX
> ...
> public:
> void PutData(???);
> ....
>
> protected:
> Struktur1* theStruct1Dat;
> Struktur2* theStruct2Dat;
> Strukturn* theStructnDat;
> ...
> Um jetzt aus anderen Modulen Daten dieser Strukturen zu veraendern, soll
> ausschliesslich die Funtion PutData verwendet werden.
> Dieser werden als Parameter mitgeteilt,
> welche Struktur zu aendern ist,
Wie willst Du die denn ermitteln? Einzige Moeglichkeit, die
mir einfaellt ist:
Fuer 1: (Struktur1*)&this->theStruct1Dat
Fuer 2: (Struktur2*)&this->theStruct1Dat + sizeof(Struktur1*)
Fuer n: (Strukturn*)&this->theStruct1Dat + sizeof(Struktur1*) + sizeof(Struktur2*) + ... + sizeof(Strukturn-1*)
Das wird ja huebsch haesslich werden. Unter der Voraussetzung,
dass gilt:
sizeof(Struktur1*) == sizeof(Struktur2*) == .. == sizeof(Strukturn*)
(was aber nicht gilt, aber darauf kommt's bei dieser Biegerei
wohl nicht mehr an).
kannst Du auch schreiben:
(Strukturi*)&this->theStruct1Dat + (i-1)*sizeof(Struktur1*)
Oops, schon wieder so unaesthetisch...
> welches Element zu aendern ist,
Dito.
> der neue Wert.
> Nur laesst sich nicht sagen, von welchem Typ die Parameter jeweils sind.
Polymorphe Parameter packt man ueblicherweise in eine Struktur, die
etwa so aussieht:
struct blubber {
enum { TYP1, TYP2, ..., TYPn } tag;
union {
typ1 typ1_val;
typ2 typ2_val;
...
typn typn_val;
} valueHolder;
};
> Muss ich jetzt verschiedene PutData-Funktionen schreiben, oder lassen sich
> alle Faelle mit einer Funktion erschlagen?
Ich empfehle Dir, Dein Design zu ueberdenken. Wenn Du eine
Klasse verwendest, willst Du ja eigentlich die darin ent-
haltene Struktur verwenden, und nicht selbst herleiten,
in welchen Speicherbereich Du schreiben musst.
Das hier ist purer Heavy Metal ;-)
--
* Greetinx from Watson (sayegh@fokus.gmd.de)
http://www.fokus.gmd.de/ovma/employees/sayegh/entry.html
signal(SIGSEGV,SIG_IGN);
Re: Datenkapselung (Korrektur)
Author: Watson
Date: Fri, 23 Feb 1996 18:05
Date: Fri, 23 Feb 1996 18:05
16 lines
1176 bytes
1176 bytes
Ist mir doch tatsaechlich wieder was schlimmes passiert, es handelt sich dabei ja um Zeiger auf Zeiger (macht die Sache noch etwas unan- sehnlicher): > Fuer 1: (Struktur1**)&this->theStruct1Dat > Fuer 2: (Struktur2**)&this->theStruct1Dat + sizeof(Struktur1*) > Fuer n: (Strukturn**)&this->theStruct1Dat + sizeof(Struktur1*) + sizeof(Struktur2*) + ... + sizeof(Strukturn-1*) Und nochmal: > (Strukturi**)&this->theStruct1Dat + (i-1)*sizeof(Struktur1*) -- * Greetinx from Watson (sayegh@fokus.gmd.de) http://www.fokus.gmd.de/ovma/employees/sayegh/entry.html signal(SIGSEGV,SIG_IGN);
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads