使用子功能的继承功能

时间:2019-03-24 23:08:15

标签: c++ class inheritance polymorphism

我一直在寻找一个基类和多个子类,每个子类都对许多共享函数中使用的一个函数进行单独的实现。这类似于

class A {
    public:
    int a() {
        return 6;
    }
    int b() {
        return a() - 2;
    }
};

class B: public A {
    public:
    int a() {
        return 10;
    }
};

int main() {
    B x;
    std::cout << x.b() << std::endl;
}

我如何使x.b()成为8而不是4

1 个答案:

答案 0 :(得分:2)

您需要使函数虚拟化,以便a()始终引用对象的真实类中a()的实现:

class A {
    public:
    virtual int a() {         //<<<<<<<<--------
        return 6;
    }
    int b() {
        return a() - 2;
    }
    virtual ~A() = default;  
};

在具有非虚拟功能的版本中,b()的主体调用它知道的唯一a(),即A::a()

作为一种好的实践,并且为了避免讨厌的错误,在定义虚拟函数时,请在派生类中指示您重写虚拟函数:

class B: public A {
    public:
    int a() override {
        return 10;
    }
};

另一个好的做法是预见基类中的虚拟析构函数。