read()
read()
我想要实现的是两个基类A和B相互补充。
因此C read()
方法实际上将调用类B read()
class A {
virtual int get_data() = 0;
void print() {
log(get_data());
}
}
class B {
virtual int get_data() {
return 4;
}
}
class C : public A, public B {
}
C my_class;
my_class.print(); // should log 4;
我不在电脑上,也没有机会在接下来的几周内使用,因此我无法对其进行测试...但是我正在设计体系结构,因此需要知道这是否可行。怎么能做到!
答案 0 :(得分:2)
多个基类可以具有相同的虚方法吗?
- 这会发生吗?
是的
所以C read()方法实际上会调用B类的read()
这不会自动发生。 base的成员函数不会覆盖不相关的base的函数。
您可以为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
声明为私有,则有可能。
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 {};