如何访问子类的新成员函数?

W.J*_*Joe -3 c++

我有2个班:

#include <iostream>
using namespace std;

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

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

    void printNew()
    {
        cout<<"Print new";
    }
};

int main()
{
    B b;
    A *a=new B;
    a->printNew();
    delete a;
}
Run Code Online (Sandbox Code Playgroud)

编译器发布错误.如果我想通过A使用printNew,我该怎么办?我认为它必须包含此功能,因为这证明在各种情况下都很有用.

Zzy*_*yzx 6

在超类A指针中具有子类实例B在OOP中称为多态.从这个A型指针,你将无法看到仅存在于B型的成员函数.您可以通过向下转换它来将此对象用作B类型对象:

B *B = dynamic_cast<B*>(a);
Run Code Online (Sandbox Code Playgroud)

由于a具有动态类型的B*,强制转换是安全的,因此返回B指针.