C++ 多个基类可以有相同的虚方法吗? 类A有一个纯虚方法read() 类B有一个实现的虚拟方法read() 我有一个C类继承了a和B 这会发生吗
我试图实现的是两个基类A和B相互补充 所以CC++ 多个基类可以有相同的虚方法吗? 类A有一个纯虚方法read() 类B有一个实现的虚拟方法read() 我有一个C类继承了a和B 这会发生吗,c++,inheritance,virtual-functions,C++,Inheritance,Virtual Functions,我试图实现的是两个基类A和B相互补充 所以Cread()方法实际上会调用类Bread() A类{ 虚拟int get_data()=0; 作废打印(){ 日志(获取数据()); } } B类{ 虚拟整数获取_数据(){ 返回4; } } C类:公共A、公共B{ } 我不在我的电脑上,在接下来的几周内也没有机会,所以我不能测试这个。。。但我正在设计架构,需要知道这是否可行,如果不可行。。这是怎么做到的 多个基类可以有相同的虚方法吗 这会发生吗 对 所以C read()方法实际上会调用类B rea
read()
方法实际上会调用类Bread()
A类{
虚拟int get_data()=0;
作废打印(){
日志(获取数据());
}
}
B类{
虚拟整数获取_数据(){
返回4;
}
}
C类:公共A、公共B{
}
我不在我的电脑上,在接下来的几周内也没有机会,所以我不能测试这个。。。但我正在设计架构,需要知道这是否可行,如果不可行。。这是怎么做到的
多个基类可以有相同的虚方法吗
C
:
class C : public A, public B {
int get_data() override;
}
这将覆盖A::get_data
和B::get_data
。为了“实际调用类B read()”,您确实可以进行这样的调用:
int C::get_data() {
return B::get_data();
}
或者。。。如果您没有声明B::get_data
private,这是可能的
如果稍微更改层次结构,则可以在另一个基中重写函数而不显式地在派生中委托。特别是,您需要一个公共基础和虚拟继承:
struct Base {
virtual int get_data() = 0;
};
struct A : virtual Base {
void print() {
std::cout << get_data();
}
};
struct B : virtual Base {
int get_data() override {
return 4;
}
};
struct C : A, B {};
struct Base{
虚拟int get_data()=0;
};
结构A:虚拟基{
作废打印(){
std::无法回答您的问题,但有许多在线编译器可用于检查以下内容:(我并不是说您问错了,只是提一下)你发布的在线编译器中没有编译它。如果不允许这样做,我怎么能这样做?@xDGameStudios当某些东西没有编译时,你应该阅读错误消息。@eerorika我读了错误消息!谢谢,我不知道同一个基的两个类可以聚合成第三个类!
struct Base {
virtual int get_data() = 0;
};
struct A : virtual Base {
void print() {
std::cout << get_data();
}
};
struct B : virtual Base {
int get_data() override {
return 4;
}
};
struct C : A, B {};