Frage zur OOP
-
Folgendes Problem:
Ich hab eine Basisklasse Basis, dann 2 Klassen "read" and "write" die von dieser Klasse erben. Jetzt will ich die Beiden wieder zusammenfügen, indem ich eine Neue Klasse erstelle, die von den Beiden erbt. Also so:class basis{ public: basis(string b){} ~basis(){} } class read : public basis{ public: read(string b) : basis(b){} ~read(){} } class write : public basis{ public: write(string b) : basis(b){} ~write(){} } class A : public read, public write{ private: public: A(string b) : read(b),write(b){} ~A(){} };Es würde zwar so funktionieren, aber der Konstruktor von der Klasse Basis wird 2mal aufgerufen, und ich glaube mal das dass keine gute Lösung ist

Wie mach ich das besser?
-
Virtuell vererben.
http://de.wikibooks.org/wiki/C%2B%2B-Programmierung:_Vererbung#Virtuelle_Vererbung
-
Sieht mir stark danach aus, als ob da sowieso vielzuviel geerbt wird. http://en.wikipedia.org/wiki/Has-a vs http://en.wikipedia.org/wiki/Is-a
-
Wir wollen ja schliesslich nicht, dass es dir wie Herrn Bebel ergeht. :xmas1:
-
Danke schonmal :xmas1:
Hab die Klassen "write" und "read" jetzt virtuell von der Basisklasse erben lassen:lass read : public virtual basis{ public: read(string b) : basis(b){} ~read(){} } class write : public virtual basis{ public: write(string b) : basis(b){} ~write(){} }Jetzt kommt aber hier ein Compilerfehler: "error C2512: Kein geeigneter Standardkonstruktor verfügbar" im Konstruktor
class A: public read, public write{ private: public: A(string path):write(path),read(path){} //Fehler ~A(){} };