Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在父函数中调用覆盖的子函数 C++中有可能调用父函数中的子函数吗?< /P>_C++_Compiler Errors_Syntax Error_Virtual Inheritance - Fatal编程技术网

在父函数中调用覆盖的子函数 C++中有可能调用父函数中的子函数吗?< /P>

在父函数中调用覆盖的子函数 C++中有可能调用父函数中的子函数吗?< /P>,c++,compiler-errors,syntax-error,virtual-inheritance,C++,Compiler Errors,Syntax Error,Virtual Inheritance,让我们举个例子:父类在函数中定义(解析)通用工作流。然后,工作流调用表示部分流的不同方法(parseElementA)。这些函数可以被子类覆盖,如果不是标准函数,则应使用父类的一部分 我的问题是:我创建一个子对象并执行工作流函数(parse)。在工作流函数中调用覆盖函数(parseElementA)时,它会从父函数而不是子函数调用该函数。 我该怎么做才能调用child中的覆盖函数 class Parent { public: void parse() { pa

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

我的问题是:我创建一个子对象并执行工作流函数(parse)。在工作流函数中调用覆盖函数(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();
输出为父级。我该怎么做才能让它返回孩子


非常感谢您的建议。

在修复代码中的编译器错误后

修复代码中的编译器错误后

#包括
班级家长{
公众:
void parse(){parseElementA();}
虚拟void parseElementA(){printf(“父\n”);}
};
类子:公共父类{
公众:
void parseElementA(){printf(“child\n”);}
};
int main(){
儿童;
parse();
返回0;
}
#包括
班级家长{
公众:
void parse(){parseElementA();}
虚拟void parseElementA(){printf(“父\n”);}
};
类子:公共父类{
公众:
void parseElementA(){printf(“child\n”);}
};
int main(){
儿童;
parse();
返回0;
}

首先,我编辑了你的代码,但我没有足够的字符来添加(分号)并添加了我的答案,这样它就可以很好地编译…@jHack,但真的有问题吗?我在固定代码中看不到任何问题,所以我不确定现在的问题是什么…@juanchopanza:printf后缺少分号。。。我可以添加空格,因为在
public
之后缺少冒号,然后我尝试再次编辑,但只能添加2个字符。@jHack,@Steve,好的,我明白了。但是OP声明了某些行为,考虑到语法错误,这是不可能的。我只是好奇OP的真实编译代码是什么样子。@Steve:同音词:我想你的意思是“被覆盖”而不是“被覆盖”,首先我编辑了你的代码,但我没有足够的字符来添加(分号),并添加了我的答案,这样它可以很好地编译…@jHack,但真的有问题吗?我在固定代码中看不到任何问题,所以我不确定现在的问题是什么…@juanchopanza:printf后缺少分号。。。我可以添加空格,因为在
public
之后缺少冒号,然后我尝试再次编辑,但只能添加2个字符。@jHack,@Steve,好的,我明白了。但是OP声明了某些行为,考虑到语法错误,这是不可能的。我只是好奇OP的真实编译代码是什么样子。@Steve:同音词:我想你的意思是“被覆盖”而不是“被覆盖”@ianmmilind也添加了我的更正(我在编辑OP问题),但投了你更高的票though@ianmmilind也添加了我的更正(我正在编辑OP问题),但还是投了你一票
#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;
}