Article View: de.comp.lang.c++
Article #1627Re: Datenkapselung
From: 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);
Technical Details
Message-ID:
<312E00C2.5DA@fokus.gmd.de>Path:
arc1-ca.pugleaf.net!stern.fokus.gmd.de!newsReferences:
<MSGID_2=3A2448=2F413.50_c1aeaca1@fidonet.org>Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!stern.fokus.gmd.de!news From: Watson <sayegh@fokus.gmd.de> Newsgroups: de.comp.lang.c++ Subject: Re: Datenkapselung Date: Fri, 23 Feb 1996 19:00:34 +0100 Organization: GMD FOKUS - Research Institute for Open Communication Systems Message-ID: <312E00C2.5DA@fokus.gmd.de> References: <MSGID_2=3A2448=2F413.50_c1aeaca1@fidonet.org> NNTP-Posting-Host: pollux.fokus.gmd.de Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-2 Content-Transfer-Encoding: 7bit X-Mailer: Mozilla 2.0 (X11; I; SunOS 5.4 sun4m)