两个继承类如何调用彼此的方法?

时间:2019-10-14 11:14:26

标签: c++ inheritance parent-child

如果2个类继承1个基类,那么这两个子类如何调用彼此的函数? 像这样,一个子类对象如何调用另一个子类的函数?

2 个答案:

答案 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?