类的C++函数重载

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问题,对于我的生活,我在这里找不到任何结果,因为每个人都在忙着理解"虚拟"关键字,这对我来说非常清楚,但不是问题这里.

Nei*_*irk 5

因为解析函数重载是在编译时完成的.当你调用函数时它只能看到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)