尝试通过指向派生类的基类指针的基类指针调用派生类方法时出错。具体来说,正在调用纯虚函数而不是派生类中的已实现函数。
我不会在这里发布所有代码,但这基本上就是我正在做的事情:
class A
{
protected:
int length;
public:
A();
A(int theLength);
virtual ~A();
virtual void printLength() = 0;
}
基类.cpp:
#include "A.h"
A::A() : length(0)
{
}
A::A(int theLength):length(theLength)
{
}
A::~A()
{
}
派生类
class B : public A
{
public:
B();
B(int theLength);
virtual ~B();
void printLength(); // EDITED TYPO HERE
}
派生类.cpp:
#include "B.h"
B::B() : A()
{
}
B::B(int theLength): A(theLength)
{
}
B::~B()
{
}
void B::printLength() {
std::cout << "The length is: " << length;
}
然后我这样称呼它:
Class C {
protected:
A** aPtr
public:
C();
C(A** theAPtr);
~C();
void printALength();
}
#include "C.h"
C::C() : aPtr(NULL) {}
C::C(A** theAPtr): aPtr(theAPtr) {}
C::~C() {}
void printALength() {
(*aPtr)->printLength();
}
int main() {
A* ptr = new B();
A** ptr2 = &ptr;
C c(ptr2);
c.printALength();
}
但是,不是调用派生类方法printLength()而是调用基类1,这是一个纯虚函数,因此就是错误。
任何人都可以看到我可能出错的地方吗?
编辑:根据评论
更改了C()构造函数