Ich habe eine Frage: Wie kann ich eine non_virtual Funktion in der Klasse implementieren, die von der abstrakten Klasse abgeleitet ist? Zum Beispiel:C++ Polymorphismus und nicht virtuelle Funktionen
class A {
public:
virtual void foo() = 0;
};
class B : public A{
public:
virtual void foo() {
/* some code */
}
//B function
void Bfoo(){
/* some code */
}
};
int main(){
A* a = new B;
a -> foo();
a -> Bfoo();
return 0;
}
g ++ bekommt:
error: ‘class A’ has no member named ‘Bfoo’
a -> Bfoo();
Gibt es eine Möglichkeit Polymorphismus zu verwenden und nicht-virtuelle Funktionen nutzen?
EDIT
Ich weiß, dass eine Bfoo()
Funktion nicht hat, so habe ich den Fehler. Ich habe diese Frage gestellt, weil ich nicht verstanden habe, wann Polymorphie sinnvoll ist.
Meine Antwort könnte sein:
ich Polymorphismus, wenn meine abgeleiteten Klassen alle die gleiche Funktion haben und von einer gemeinsamen Basisklasse abgeleitet.
Aber wenn eine Klasse eine andere Funktion hat, sinkt der Polymorphismus?
Es ist nicht klar, was Sie erwarten. 'A' hat keine solche Methode, es sollte offensichtlich sein, warum Sie es nicht von einem Zeiger auf' A' aufrufen können. Dies klingt wie ein XY-Problem, bitte beschreiben Sie, was Sie erreichen möchten. – Rotem
'((B *) a) -> Bfoo()'? –
@PatrickRoberts dieser Fix funktioniert, aber es zwingt zu viel die Bedeutung von Polymorphie. Wenn ich '((B *) a) -> Bfoo() verwende' 'könnte ich' B * a = neues B' anstelle von 'A * b = neues B' verwenden – linofex