Cast: An private Member herankommen
-
Hallo Forum,
die Zugriffsrechte werden doch nur zur Kompilezeit beachtet.
1. Wenn ich einen Klasse A habe die nur einen private Int Member hat. Nun erstelle ich eine Klasse B mit nur einem Public Int. Wenn ich nun ein Objekt A nach B caste, kann ich dann auf den Int zugreifen? Was ich eigentlich wissen will: Beinflussen public und private den Aufbau des Objektes innerhalb des RAMs. (Das Stichwort Undefined behavior kenne ich.)2. Ich habe eine Klasse A mit einem Public Int. Nun leite ich B von A ab, jedoch mit dem Schlüsselwort Private. Erstelle ich nun ein Objekt von B kann man auf den Int nicht mehr zugreifen. Mache ich nun einen Cast auf einen Zeiger vom Typ A, dann sollte doch der Int wieder zugreifbar sein. Beeinflussen private/public die Repräsentation des Objektes im Speicher?
3. Gibt es eine Programmiersprache die bei der Polymorphie den Rückgabewert zur Auswahl der richtigen Funktion heranzieht?
Vielen Dank
Luigi
-
Luigi_X schrieb:
Beinflussen public und private den Aufbau des Objektes innerhalb des RAMs.
Der Aufbau der Klassen ist Sache des Compilerherstellers. Es wäre aber eine ungewöhnliche Compilerimplementierung, die einen Unterschied macht.
Beeinflussen private/public die Repräsentation des Objektes im Speicher?
Dies ist die gleiche Frage wie oben.
3. Gibt es eine Programmiersprache die bei der Polymorphie den Rückgabewert zur Auswahl der richtigen Funktion heranzieht?
Garantiert, aber mir fällt gerade keine ein.
Viel Spaß dabei, dir selber die Vorteile von Objektorientierung kaputt zu machen

-
Solche Fragen werden sehr schnell emotional aufgefasst?

Ich werd mal was basteln...
-
Das hat nichts mit Emotionalität zu tun, das ist einfach eine Tatsache. Solche Dinge mögen zwar (fast) immer funktionieren, aber durch das Aushebeln der Kapselung machst du ihre Vorteile zunichte. Invarianten können dadurch verletzt werden, ohne dass die Klasse das weiß, damit kann das Verhalten von unerwartet bis undefiniert variieren, du wirfst die ganzen Garantien die dir die Schnittstelle dr Klasse gibt über Bord.
-
pumuckl schrieb:
Das hat nichts mit Emotionalität zu tun, das ist einfach eine Tatsache. Solche Dinge mögen zwar (fast) immer funktionieren, aber durch das Aushebeln der Kapselung machst du ihre Vorteile zunichte. Invarianten können dadurch verletzt werden, ohne dass die Klasse das weiß, damit kann das Verhalten von unerwartet bis undefiniert variieren, du wirfst die ganzen Garantien die dir die Schnittstelle dr Klasse gibt über Bord.
Dinge ihrem Sinn udn Zweck nach zu benutzen ist doch auch langweilig
:xmas1: :xmas2:
-
Wo ist der Sinn? Nur mal so als Frage von einem Anfänger.
-
Falls ich gemeint bin: Spaß am experimentieren. Mehr nicht.
-
Luigi_X schrieb:
Falls ich gemeint bin: Spaß am experimentieren. Mehr nicht.
Dann kannst du ja auch einfach dieses berüchtigte Konstrukt benutzen:
#define class struct #define private public #define protected publicIst zwar im prinzip illegal (man darf keine reservierten Wörter als Makrobezeichner benutzen), machen aber fast alle Compiler mit.
-
SeppJ schrieb:
Luigi_X schrieb:
Falls ich gemeint bin: Spaß am experimentieren. Mehr nicht.
Dann kannst du ja auch einfach dieses berüchtigte Konstrukt benutzen:
#define class struct #define private public #define protected publicIst zwar im prinzip illegal (man darf keine reservierten Wörter als Makrobezeichner benutzen), machen aber fast alle Compiler mit.
löl
