指向派生类调用纯虚函数的指针

时间:2014-11-16 05:38:06

标签: c++ pointers inheritance virtual-functions

尝试通过指向派生类的基类指针的基类指针调用派生类方法时出错。具体来说,正在调用纯虚函数而不是派生类中的已实现函数。

我不会在这里发布所有代码,但这基本上就是我正在做的事情:

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()构造函数

0 个答案:

没有答案