繁体   English   中英

具有多态性的打印方法。 C++

[英]Print Methods with polymorphism. c++

我有 2 个看起来像这样的类:

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;
}

现在我的问题是如何打印“笨拙”的方法? (没有在 main 中创建 B 对象。)
我认为它与动态铸造有关,但我不确定。

初步说明:由于A类旨在派生,因此它确实应该有一个虚拟析构函数。 如果没有, A* a = new B; delete a; A* a = new B; delete a; 不会调用B析构函数。

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

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

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

但是当你发现自己在使用动态转换时,你应该总是想知道你是否不正常地使用了多态......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM