volatile und zugriff über pointer
-
Hallo zusamms,
ich verädere die Member Variablen einer Klasse in einer anderen Klasse, indem ich einen Pointer übrgebe, ungefähr so:class zwei; class eins { int einsdat; public: void prepare(class zwei& helper) { zwei.pointer=&einsdat; zwei.change();} } class zwei { public: int *pointer; void change(void) { *pointer=23;} }
Muss jetzt das Datenelement einsdat als volatile gekennzeichnet werden (benutze kein multithreading, oder sowas)?
LG, J.
-
es ist eigentlich nie notwendig eine variable als volatile zu deklarieren, da dies implizit angenommen wird, solange du sie nicht als const deklarierst. dein code ist durchaus moeglich, wie z.b. auch folgendes:
#include <iostream> int main () { const char* const_pointer = "const_pointer"; std::cout << const_pointer << '\n'; char* nonconst_pointer = "nonconst_pointer"; const_pointer = nonconst_pointer; // laesst sich durch const char* const verhindern std::cout << const_pointer << '\n'; std::cin.get (); return 0; };
das ist aber nicht die feine art und sollte vermieden werden, wo es nur geht.
was auch immer
-
weshalb soll einsdat denn explizit konstant sein? (reicht nicht private??) Bin noch nicht so bewandert in OOP: ist in joeX's Bsp einsdat private? Ist die Angabe private optional, da von vorne herein angenommen?
Aber das funktioniert bestimmt nicht:joeX schrieb:
class zwei; class eins { int einsdat; public: void prepare(class zwei& helper) { zwei.pointer=&einsdat;//eher: helper.pointer=... zwei.change();}//und hier: helper.change(); }
-
freshman schrieb:
ist in joeX's Bsp einsdat private? Ist die Angabe private optional, da von vorne herein angenommen?
ja, bei class schon.
joeX schrieb:
ich verädere die Member Variablen einer Klasse in einer anderen Klasse, indem ich einen Pointer übrgebe, ungefähr so
[Schnipp]
Muss jetzt das Datenelement einsdat als volatile gekennzeichnet werden?nein.
wenn du nicht willst, dass einsdat verändert werden kann, dann mach es const.
volatile hat eine andere bedeutung
-
was auch immer schrieb:
es ist eigentlich nie notwendig eine variable als volatile zu deklarieren, da dies implizit angenommen wird, solange du sie nicht als const deklarierst.
Wo hast du das denn her? Das ist definitiv Unsinn.
-
Diese Konstruktion erscheint mir ein bissl wie Murks. Darf ich mal dein Bsp.
weiterstricken?joeX schrieb:
class zwei; class eins { int einsdat; public: void prepare(class zwei& helper) { zwei.pointer=&einsdat; zwei.change();} } class zwei { public: int *pointer; void change(void) { *pointer=23;} } int main() { eins foo; zwei bar; foo.prepare(bar); *bar.pointer = -1; }
Ups, jetzt hab ich von außen einen Private-Member von eins geändert.
Und das soll doch gar net sein.
-
Ups, jetzt hab ich von außen einen Private-Member von eins geändert.
Und das soll doch gar net sein.Jupp, genau das ist der Sinn der Konstruktion (Tatsächlich will ich in klasse zwei eine externe Konfigurations Datei parsen, die z.B. (beliebige) Integer Variablen initialisieren kann.
Ich hätte auch kein Problem gehabt, die Klasse 'zwei' als 'friend' von Klasse 'eins' zu deklarieren, ist aber bei Zugriff über pointer gar nicht notwendig(?).