C++ C++;调用了基方法而不是派生方法

C++ C++;调用了基方法而不是派生方法,c++,inheritance,C++,Inheritance,所以,我知道像这样的问题被问了很多,但是其他的答案似乎表明这应该是可行的,所以我想我应该特别问一下我的代码。我花更多的时间在.NET和Java上,所以我可能忘了什么 我正在创建一个基本小部件和一组特定的小部件(按钮、其他图形项目)。我正在尝试循环浏览一个小部件的链接列表,我想要的是调用特定小部件的特定呈现方法。下面是演示我的问题的简化代码,在我第一次调用Render时,会调用特定的Render函数。如果我将cGeneralWidget指针传递给调用渲染对象的函数,则会调用基本方法。我想,只要我发

所以,我知道像这样的问题被问了很多,但是其他的答案似乎表明这应该是可行的,所以我想我应该特别问一下我的代码。我花更多的时间在.NET和Java上,所以我可能忘了什么

我正在创建一个基本小部件和一组特定的小部件(按钮、其他图形项目)。我正在尝试循环浏览一个小部件的链接列表,我想要的是调用特定小部件的特定呈现方法。下面是演示我的问题的简化代码,在我第一次调用Render时,会调用特定的Render函数。如果我将cGeneralWidget指针传递给调用渲染对象的函数,则会调用基本方法。我想,只要我发送一个指针,C++就足够聪明,知道对象是什么,并调用重写方法。 否则,处理基对象集合并适当调用派生方法的正确方法是什么

多谢各位

class cGeneralWidget
{
public:
    void Render()
    {
        int a = 99;
    }
};

class cSpecificWidget : public cGeneralWidget
{
public:
    void Render()
    {
        int a = 99;
    }
};

void GeneralRenderingFunction(cGeneralWidget * b)
{
    b->Render();   // <-- calls the base function
}

int main(int argc, char* argv[])
{

    cSpecificWidget wd;
    wd.Render();   // <-- calls the derived function
    GeneralRenderingFunction(&wd);  

    return 0;
}
类cGeneralWidget
{
公众:
void Render()
{
INTA=99;
}
};
类CSSpecificWidget:publicGeneralWidget
{
公众:
void Render()
{
INTA=99;
}
};
void GeneralRenderingFunction(cGeneralWidget*b)
{
在基类中的b->Render();//

class cGeneralWidget
{
public:
    virtual void Render()
    {
        int a = 99;
    }
};
渲染必须是虚拟的,因此它会覆盖它

注意:虚函数是在基类中声明并重新定义(重写)的成员函数按派生类。当您使用指针或基类引用引用派生类对象时,可以为该对象调用虚拟函数并执行派生类版本的函数。

您应该定义Render()方法在你的基类中使用“代码>虚拟>关键字,在派生类中使用<代码>覆盖关键字。如果在基类实现中不将<代码>虚拟>关键字,则C++不会标记为Virtual.< /P>
class cGeneralWidget
{
public:
    virtual void Render()
    {
        int a = 99;
    }
};

class cSpecificWidget : public cGeneralWidget
{
public:
    void Render() override
    {
        int a = 99;
    }
};