Abstrakte Klasse ohne rein virtuelle Methode
-
Hallo
In meiner Klassenhierarchie habe ich verschiedene Klassen die abstrakt sind. Man soll nur von den untersten Klassen ein Objekt erzeugen können. Nun haben fast alle Basisklassen rein virtuelle Methoden und deshalb auch abstract. Aber halt nur fast. Denn 2 Stück haben keine virtuellen Methoden. Ist es nicht möglich diese trotzdem als abstract zu deklareieren, so dass man von diesen kein Objekt erzeugen kann?
-
Eifach den(die Konstruktor(en) protected setzen.
Das heißt aber nicht, dass der nutzende Programmierer auch die Ableitung sinnvoll macht...
-
Das heißt aber nicht, dass der nutzende Programmierer auch die Ableitung sinnvoll macht...
?? Versteh ich nicht ganz.
-
dtor virtual pure machen
-
Aha. Ok. Danke
-
DerWahreGast schrieb:
Das heißt aber nicht, dass der nutzende Programmierer auch die Ableitung sinnvoll macht...
?? Versteh ich nicht ganz.
Wenn der Entwickler eine Ableitung mach und Konstruktor (meine Methode) oder Destruktor (hustbaers Methode) verwendet, heißt diesnoch lange nicht, dass er irgendwas anderes anpasst was für die Funktion notwendig ist.
D.h. Man kann die Klasse doch ohne weiteres direkt erzeugen, nur halt über einen weiteren Ableitungsschritt.
Sinn dieser Aktion sllte es ja sein, den Missbrauch der Klasse zu unterbinden. Oder? Das erreicht man so aber nicht.
-
Das ist richtig.
Nun ist es aber bei mir so: Meine Basisklasse hat Methoden die in der abgeleiteten Klasse nicht unbedingt implementiert werden müssen. Die Methode ist auch in der Basisklasse implementiert. Das heißt eine gemeinsame Funktionalität. Wenn nun eine Klasse abgeleitet wird, und die besagte Methode implementiert wird, muss die Funktionalität auch aus der Basisklasse zusätzlich aufgerufen werden.
-
Dann kannst Du aber die Funktion mit Implementierung als virtuell deklarieren:
class CMyBase { public: virtual void MyVirtualFunc()=0 { DoSomeThingSpecial(); } };
Dadurch muss MyVirtualFunc überschrieben werden, hat aber eine Implementierung.
-
Das geht. Das wußte ich gar nicht. Ok danke.
Aber ich kann nicht verhindern, dass die die abgeleitete Klasse die Basisklassenmethode nicht aufruft.
Also die abgeleitete Methode muss die Basisklassenfunktion auch immer noch aufrufen.
-
Das ist ein Grundsatzproblem! Dass die Funktion der Basisklasse aufgerufen wird kann man nicht erzwingen. Das geht aber IMHO in keiner der OOP Sprachen die ich kenne.
-
Ok. Vielen Dank