【发布时间】:2019-11-25 11:26:21
【问题描述】:
我有这个sn-p:
#include <iostream>
#include <vector>
class A {
public:
void m() {
std::cout << "hi";
}
};
class B : public A {
public:
void m() {
std::cout << "hello";
}
};
int main() {
std::vector<A*> v;
v.push_back(new A);
v.push_back(new B);
v.push_back(new A);
for (A *obj : v)
obj->m();
}
问题是这个程序打印hihihi而不是hihellohi,这意味着它总是调用静态类型(即A)的m()方法而不是动态方法(B )。怎么总是调用动态类型的m()方法呢?
感谢您的帮助。
【问题讨论】:
-
然后声明
virtual void m()。 -
如果您了解静态类型和动态类型,那么您肯定了解虚函数吗?
标签: c++ type-conversion