如果2个类继承1个基类,那么这两个子类如何调用彼此的函数? 像这样,一个子类对象如何调用另一个子类的函数?
答案 0 :(得分:1)
这是使用虚拟成员函数的示例。
#include <iostream>
struct Base { // abstract base class
virtual void func_1(Base&) = 0;
virtual void func_2(Base&) = 0;
virtual ~Base() = 0;
};
Base::~Base() {} // to not force children to have to implement the destructor
// child classes, overriding the necessary virtual functions in the base class
struct One : Base {
void func_1(Base& o) override {
std::cout << "One calling some Base descendant\n";
o.func_2(*this); // here, one child is calling another
}
void func_2(Base& o) override {}
};
struct Two : Base {
void func_1(Base& o) override {}
void func_2(Base& o) override {
std::cout << "Two called\n";
}
};
int main() {
One o;
Two t;
o.func_1(t);
}
输出:
One calling some Base descendant
Two called
答案 1 :(得分:0)
他们没有。 这两个对象都将扩展 基础类的成员,因此它们将具有相同的成员和属性,但不会具有任何其他附加特性。
有点有趣的类比:当他们说孩子们有母亲的眼睛时,并不是说他们实际上有她的眼睛,而是拥有遗传上完美的复制品,当时是单个复制品。
如果您要引用子类的引用,请参见以下内容: How to use clone() in C++ with multiple inheritance of abstract classes?