在父函数中调用覆盖的子函数 C++中有可能调用父函数中的子函数吗?< /P>
让我们举个例子:父类在函数中定义(解析)通用工作流。然后,工作流调用表示部分流的不同方法(parseElementA)。这些函数可以被子类覆盖,如果不是标准函数,则应使用父类的一部分 我的问题是:我创建一个子对象并执行工作流函数(parse)。在工作流函数中调用覆盖函数(parseElementA)时,它会从父函数而不是子函数调用该函数。 我该怎么做才能调用child中的覆盖函数在父函数中调用覆盖的子函数 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
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;
}