Ich habe versucht, das Beispiel in this answer zu "reparieren", um zu demonstrieren, wie eine reine virtuelle Funktion aufgerufen werden kann.Warum ist das kein Aufruf einer rein virtuellen Funktion?
#include <iostream>
using namespace std;
class A
{
int id;
public:
A(int i): id(i) {}
int callFoo() { return foo(); }
virtual int foo() = 0;
};
class B: public A
{
public:
B(): A(callFoo()) {}
int foo() { return 3; }
};
int main() {
B b; // <-- this should call a pure virtual function
cout << b.callFoo() << endl;
return 0;
}
Aber ich bekomme keine Laufzeitfehler here (with C++ 4.9.2), aber der Ausgang 3. habe ich versucht, das gleiche mit Borland C++ 5.6.4, aber es eine Zugriffsverletzung Ich erhalte. Ich denke, dass foo()
rein virtuell im Aufruf des Konstruktors der Basisklasse sein sollte.
Wer ist falsch? Soll ich mehr Compiler ausprobieren? Habe ich recht, wenn ich virtuelle Funktionen verstehe?
Ich würde die Ergebnisse eines Tests mit Borland C++ nicht verwenden, um zu sehen, ob ein Codeschnipsel gültig und/oder konform mit dem Standard ist;) – CoryKramer
@CoryKramer Virtuelle Funktionen werden seit Jahrzehnten verwendet. – Wolf
Ich bin mir dessen bewusst, ich machte eine freche Bemerkung über jemanden, der immer noch Borland IDEs verwendet – CoryKramer