【问题标题】:call overwritten child function within parent function在父函数中调用覆盖的子函数
【发布时间】:2011-09-27 23:12:56
【问题描述】:

在 C++ 中是否可以从父函数调用子函数。

举个例子:父类在函数中定义(解析)一般工作流程。然后,工作流调用代表流的一部分的不同方法 (parseElementA)。这些函数可以被子类覆盖,如果不是标准函数,它是父类的一部分。

我的问题是:我创建了一个子对象并执行工作流函数(解析)。当在工作流函数中调用被覆盖的函数 (parseElementA) 时,它会从父函数而不是子函数调用该函数。 我该怎么做,它会调用 child 中的覆盖函数。

    class Parent {
      public:
        void parse() { parseElementA(); }
        virtual void parseElementA() { printf("parent\n"); }
    };

    class Child : public Parent {
      public: 
        void parseElementA() { printf("child\n"); }
    };

    Child child;
    child.parse();

输出是父级。我能做些什么让它返回孩子。

非常感谢您的任何建议。

【问题讨论】:

  • 首先我编辑了你的代码,但我没有足够的字符来添加(分号)并添加了我的答案,以便它编译得很好......
  • @jHack 但真的有问题吗?我在固定代码中看不到任何问题,所以我不确定现在的问题是什么......
  • @juanchopanza: @juanchopanza: 在printf 之后缺少分号...我可以添加空格,因为public 之后缺少冒号,然后我尝试再次编辑但无法仅添加 2 个字符。
  • @jHack,@Steve,好的,我明白了。但是 OP 声称某些行为,鉴于语法错误,这是不可能的。我只是好奇 OP 的真实编译代码是什么样的。
  • @Steve: Homonyms: 我认为你的意思是“覆盖”而不是“覆盖”

标签: c++ compiler-errors syntax-error virtual-inheritance


【解决方案1】:

修复代码中的编译器错误后,it works fine

【讨论】:

  • @ianmmilind 也添加了我的更正(我正在编辑 OP 问题),但还是支持你
【解决方案2】:
#include <cstdio>

class Parent {
        public:
                void parse() { parseElementA(); }
                virtual void parseElementA() { printf("parent\n"); }
};

class Child : public Parent {
        public:
                void parseElementA() { printf("child\n"); }
};

int main() {

   Child child;
   child.parse();

   return 0;
}

【讨论】:

    猜你喜欢
    • 2017-09-30
    • 1970-01-01
    • 2022-12-04
    • 1970-01-01
    • 2010-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多