我有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,我该怎么办?我认为它必须包含此功能,因为这证明在各种情况下都很有用.
在超类A指针中具有子类实例B在OOP中称为多态.从这个A型指针,你将无法看到仅存在于B型的成员函数.您可以通过向下转换它来将此对象用作B类型对象:
B *B = dynamic_cast<B*>(a);
Run Code Online (Sandbox Code Playgroud)
由于a具有动态类型的B*,强制转换是安全的,因此返回B指针.