C++ c++;:使用派生类实例的基类指针调用基类虚函数

C++ c++;:使用派生类实例的基类指针调用基类虚函数,c++,C++,我有三个类:我可以访问唯一的基类指针,但这个指针实际上是一个派生类对象。我想使用这个基指针来调用基类虚函数 class A { public: virtual void print() = 0; }; class B: public A { public: virtual void print() override { cout <<"I am B\n"; } };

我有三个类:我可以访问唯一的基类指针,但这个指针实际上是一个派生类对象。我想使用这个基指针来调用基类虚函数

    class A
    {
        public:
        virtual void print() = 0;
    };

    class B: public A
    {
       public:
        virtual void print() override { cout <<"I am B\n"; }
    };

    class C: public B
    {
        public:
        virtual void print() override { cout <<"I am C\n"; }
    };

    int main()
    {
        cout<<"Hello World\n";

        A *a = new C();
        a->print(); // prints "I am C"

        //use pointer 'a' to print "I am B"

        return 0;
   }
A类
{
公众:
虚空打印()=0;
};
B类:公共A
{
公众:

virtual void print()override{cout在阅读一本书时,在两页之后发现了这个问题

class A
{
    public:
    virtual void print() = 0;
};

class B: public A
{
    public:
    virtual void print() override { cout <<"I am B\n"; }
};

class C: public B
{
    public:
    virtual void print() override { cout <<"I am C\n"; }
};

int main()
{
    cout<<"Hello World\n";

    A *a = new C();
    a->print();


    B *b = dynamic_cast<B*>(a);
    b->B::print();

    return 0;
}
A类
{
公众:
虚空打印()=0;
};
B类:公共A
{
公众:

virtual void print()override{我能相信你的问题对于自我回答来说太琐碎了,其他人可能对此不感兴趣。它也是重复的。在大多数答案中,基类方法是在派生类方法中使用类似base::method()的东西调用的。没有建议向下转换的答案。在我的代码中,不允许我修改派生类定义。这个问题的全部要点是,如何向下转换并使用基类指针调用虚拟函数。我在堆栈中的任何位置都找不到这个答案。这里有一个答案正好用于此。