[英]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.