使用多态性打印方法.c++



我有两个类,如下所示:

class A
{
public:
A();
~A();
virtual void func() { cout << "this is A class" << endl; };
};

和:

class B:public A
{
public:
B();
~B();
virtual void func() { cout << "this is B class" << endl; };
virtual void funcky() { cout << "How to print this method?" << endl; };
};

这是我的主菜:

include "B.h"
void main()
{
A* a;
a = new B;
}

现在我的问题是如何打印方法"funcky"?(主要不生成B对象。)
我认为这与动态选角有关,但我不确定。

一个初步注释:由于A类是派生的,所以它确实应该有一个虚拟析构函数。如果没有,A* a = new B; delete a;将不会调用B析构函数。

然后,即使在这样一个简单的例子中,它也没有多大意义,你想要的是动态铸造。它有点粗糙,但存在于标准中,当您解耦接口和实现时,它是有意义的。当实现类中的方法接收到指向接口的指针时,它会使用动态转换将其转换为实际类并使用私有方法。

在您的示例中,您应该简单地使用:

B* b = dynamic_cast<B *>(a);
if (b != nullptr) {
    b->funcky();
}

但是,当您发现自己在使用动态铸造时,您应该始终怀疑您是否在异常地使用多态性。。。

相关内容

最新更新