 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Hans-Peter huth Guest
|
Posted: Sun Feb 25, 2007 10:57 pm Post subject: Zeiger auf umhuellendes Objekt ermitteln |
|
|
Hallo,
in meinem derzeitigen Programm könnte ich eine Möglichkeit gebrauchen, in
einem Element einer Objektinstanz einen Zeiger auf die umhüllende Klasse zu
bekommen. Etwas in der Art:
class Element {
public:
dosomething() {
Huelle* ptr_to_container(); // wie??????
// im "richtigen" Programm soll hier eine Nachricht mit
// einem Zeiger in eine Liste eingetragen werden um ein
// Nachrichtenbasiertes System zu ermöglichen
ptr_to_container->Message();
}
}
class Huelle {
public:
Huelle();
....
void Message() { cout << "in Huelle" << endl; }
void DoSomthing() {
e.dosomething();
}
privat:
Element e;
}
int main(int,char**) {
Huelle container;
container.DoSomthing();
return 0;
}
Das ist jetzt kein sinnvolles Beispiel, soll aber illustrieren was ich
möchte. Natürlich könnte ich Element e explizit mit "this" im Konstruktor
von Huelle initialisieren, aber geht das auch anders, automatisch?
Alle Hinweise und Suchstichworte willkommen.
Gruß HPH |
|
| Back to top |
|
 |
Thomas Maeder Guest
|
Posted: Sun Feb 25, 2007 11:49 pm Post subject: Re: Zeiger auf umhuellendes Objekt ermitteln |
|
|
Hans-Peter huth <hans-ph (AT) web (DOT) de> writes:
| Quote: | in meinem derzeitigen Programm könnte ich eine Möglichkeit
gebrauchen, in einem Element einer Objektinstanz einen Zeiger auf
die umhüllende Klasse zu bekommen. Etwas in der Art:
class Element {
public:
dosomething() {
|
Syntaxfehler - es fehlt der Rückgabetyp.
| Quote: | Huelle* ptr_to_container(); // wie??????
|
Indem Du das so programmierst.
Z.B. könnte der Element-Konstruktor eine Referenz (oder einen Zeiger)
auf Huelle erhalten und sich merken. |
|
| Back to top |
|
 |
Martin Winkler Guest
|
Posted: Mon Feb 26, 2007 12:34 am Post subject: Re: Zeiger auf umhuellendes Objekt ermitteln |
|
|
Hans-Peter huth wrote:
| Quote: | Hallo,
in meinem derzeitigen Programm könnte ich eine Möglichkeit gebrauchen, in
einem Element einer Objektinstanz einen Zeiger auf die umhüllende Klasse
zu bekommen. Etwas in der Art:
[...]
Das ist jetzt kein sinnvolles Beispiel, soll aber illustrieren was ich
möchte. Natürlich könnte ich Element e explizit mit "this" im Konstruktor
von Huelle initialisieren,
|
Genau das ist der Weg.
| Quote: | aber geht das auch anders, automatisch?
|
Meinem Verständnis nach gibt C++ so etwas nicht automatisch her.
Gruß
Martin |
|
| Back to top |
|
 |
Rolf Magnus Guest
|
Posted: Mon Feb 26, 2007 3:37 pm Post subject: Re: Zeiger auf umhuellendes Objekt ermitteln |
|
|
Hans-Peter huth wrote:
| Quote: | Hallo,
in meinem derzeitigen Programm könnte ich eine Möglichkeit gebrauchen, in
einem Element einer Objektinstanz einen Zeiger auf die umhüllende Klasse
zu bekommen. Etwas in der Art:
class Element {
public:
dosomething() {
Huelle* ptr_to_container(); // wie??????
// im "richtigen" Programm soll hier eine Nachricht mit
// einem Zeiger in eine Liste eingetragen werden um ein
// Nachrichtenbasiertes System zu ermöglichen
ptr_to_container->Message();
}
}
|
;
| Quote: |
class Huelle {
public:
Huelle();
...
void Message() { cout << "in Huelle" << endl; }
void DoSomthing() {
e.dosomething();
}
privat:
Element e;
}
|
;
| Quote: | int main(int,char**) {
|
Wenn du die Parameter bei main() nicht brauchst, lass sie einfach weg.
| Quote: | Huelle container;
container.DoSomthing();
return 0;
}
Das ist jetzt kein sinnvolles Beispiel, soll aber illustrieren was ich
möchte. Natürlich könnte ich Element e explizit mit "this" im Konstruktor
von Huelle initialisieren, aber geht das auch anders, automatisch?
|
Es wurde ja schon geschrieben, daß das nicht geht. Wie sollte das auch
gehen? Was sollte dieser Automatismus in einem Element liefern, das kein
Member von Huelle ist? |
|
| Back to top |
|
 |
Marcel Müller Guest
|
Posted: Mon Feb 26, 2007 4:08 pm Post subject: Re: Zeiger auf umhuellendes Objekt ermitteln |
|
|
Hallo!
Hans-Peter huth schrieb:
| Quote: | class Element {
....
}
class Huelle {
....
privat:
Element e;
}
Das ist jetzt kein sinnvolles Beispiel, soll aber illustrieren was ich
möchte. Natürlich könnte ich Element e explizit mit "this" im Konstruktor
von Huelle initialisieren, aber geht das auch anders, automatisch?
|
Keine Chance! Das kann nicht gehen. Das umhüllende Objekt muss nicht
einmal existieren und es könnte nahezu jeden beliebigen Typs sein.
Wenn dass tatsächlich dem avisierten Einsatz hinreichend nahe kommt (1:1
Kardinalität etc.), dann ist das Design falsch. Sowas wäre dann angebracht:
class Huelle : private Element {
Element könnte dann über virtuelle Funktionen mit der "Hülle" kommunizieren.
Alternative B: (die ist letztlich schon genannt)
Element benötigt bei der Konstruktion ein Kommunikationsinterface, das
Hülle implementieren muss (in C++ eine komplett abstrakte Klasse, von
der virtuell geerbt wird). Damit bekommt man auch ein Container-Problem
in den Griff, also der Fall, wenn Hülle mehrere Elementen enthalten kann.
Die programmtechnischen Maßnahmen ergeben sich notwendigerweise aus der
Aufgabenstellung, da Element ganz offenbar für sich alleine nicht
lebensfähig ist und einen typisierten Partner braucht.
Marcel |
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|