代码之家  ›  专栏  ›  技术社区  ›  AlgoRythm

结构未继承虚拟函数

  •  1
  • AlgoRythm  · 技术社区  · 7 年前

    我有两个相互继承的结构,以及一个与这些结构没有关系但管理 std::vector 主类的指针。这里有一些代码。

    父类定义:

    struct Widget {
        virtual void inflate();
    }
    

    子类定义:

    struct Label : public Widget {
        void inflate();
    }
    

    功能实现:

    void Label::inflate(){
        std::cout << "Child function called" << std::endl;
    }
    
    void Widget::inflate(){
        std::cout << "Parent function called" << std::endl;
    }
    

    用法:

    std::vector<Widget*> widgets = std::vector<Widget*>();
    Label1 = Label();
    Label2 = Label();
    widgets.push_back(Label1);
    widgets.push_back(Label2);
    int i = 0;
    while(i < widgets.size()){
        widgets[i]->inflate();
        i++;
    }
    

    输出:

    Parent function called
    Parent function called
    

    非常感谢。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Patrick Kostjens    7 年前

    正如前面的评论所说,问题在于您的使用代码。我对其进行了修改,使其能够按预期编译和运行。我无法告诉您原始代码的确切问题,因为它无法编译。

    以下是工作代码:

    #include <iostream>
    #include <vector>
    
    struct Widget {
        virtual void inflate();
    };
    
    struct Label : public Widget {
        void inflate();
    };
    
    void Label::inflate(){
        std::cout << "Child function called" << std::endl;
    }
    
    void Widget::inflate(){
        std::cout << "Parent function called" << std::endl;
    }
    
    int main()
    {
        std::vector<Widget*> widgets = std::vector<Widget*>();
        Label Label1;
        Label Label2;
        widgets.push_back(&Label1);
        widgets.push_back(&Label2);
        int i = 0;
        while(i < widgets.size()){
            widgets[i]->inflate();
            i++;
        }
    }
    

    查看其工作情况的链接: https://ideone.com/ETDClF