Ber*_*lor 0 c++ inheritance overloading
我有3节课
class A {
//...
}
class B : public A {
//...
}
Run Code Online (Sandbox Code Playgroud)
和C类:
#include "A.h"
#include "B.h"
class C
{
void method(A anObjOfA);
void method(B anObjOfB);
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我这样做
B* ptr = new B();
A* ptrToB = ptr;
c.method(*ptrToB);
Run Code Online (Sandbox Code Playgroud)
它调用A类型的对象的方法,而不是继承的实际类型B.我怎样才能确保调用inheritence-tree中最深的对象的正确函数,而不是在编译时实际知道它的类型?
PS:我确定这是一个noob问题,对于我的生活,我在这里找不到任何结果,因为每个人都在忙着理解"虚拟"关键字,这对我来说非常清楚,但不是问题这里.
因为解析函数重载是在编译时完成的.当你调用函数时它只能看到A指针的一部分,即使它可以指向一个B.
也许你想要的是以下内容:
class A
{
public:
virtual void DoWorkInC()
{
cout << "A's work";
}
virtual ~A() {}
};
class B : public A
{
public:
virtual void DoWorkInC()
{
cout << "B's work";
}
};
class C
{
void method(A& a)
{
a.DoWorkInC();
}
}
Run Code Online (Sandbox Code Playgroud)