如何在转换为基类后让c++调用被覆盖的方法



我有一个类a的方法Hello:

class A {
public:
void Hello(){
std::cout << "Hi from class A!" << std::endl;
}
};

然后我有一个继承类a的类B,并有自己的Hello方法:

class B : public A {
public:
void Hello(){
std::cout << "Hi from class B!" << std::endl;
}
};

我创建了一个B类的新对象,然后将其强制转换为a类的类型。

B myB;
A myA = static_cast<A>(myB);

我怎样才能让myA.Hello();打印出"来自B类的Hi !"?

你应该使用引用并且可以调用Hello()

B myB;
A& myA = static_cast<A&>(myB);
myA.Hello();

功率:

Hi from class A!

如果您添加"virtual"类A的Hello()

virtual void Hello() {

可以得到如下输出:

Hi from class B!