Hallo,
ich habe ein Diamantenproblem. Leider konnte ich im Netz keine Lösung
finden. (aber zumindest hab ich herausgefunden, wie sich das Problem
nennt. ;) )
Ich möchte folgende Klassen:
Vereinfacht aus "diamond_a.cpp"
1 | class istream {
|
2 | protected:
|
3 | application *app;
|
4 | }
|
5 | class ostream {
|
6 | protected:
|
7 | application *app;
|
8 | }
|
9 | class test : public istream, public ostream {
|
10 | // auch in dieser Klasse wird app benötigt
|
11 | }
|
hierbei gilt: innerhalb der Vererbung zeigt istream::app, ostream::app,
test::app immer auf das selbe Objekt (muss!)! Nur der Compiler wird das
vermutlich nicht verstehen. Darum dachte ich, ich mache eine Basisklasse
für istream und ostream:
Vereinfacht aus "diamond_b.cpp"
1 | class iostream {
|
2 | protected:
|
3 | application *app;
|
4 | };
|
5 | class istream : virtual public iostream {
|
6 | // in dieser Klasse wird app benötigt
|
7 |
|
8 | };
|
9 | class ostream : virtual public iostream {
|
10 | // in dieser Klasse wird app benötigt
|
11 |
|
12 | };
|
13 | class test : public istream, public ostream {
|
14 | // in dieser Klasse wird app benötigt
|
15 | };
|
nur wie baue ich jetzt die constructors für die jeweiligen Klassen, dass
alles korrekt initialisiert wird?
Ich hoffe, ich konnte mein Problem verständlich schildern.
Vielen Dank