【问题标题】:Inherited Function Using Child Function使用子函数的继承函数
【发布时间】:2019-03-24 23:08:14
【问题描述】:

我希望有一个基类和多个子类,每个子类都有一个用于许多共享函数的函数的单独实现。这将类似于此

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

【问题讨论】:

  • 你很可能想看看什么是虚函数……

标签: c++ class inheritance polymorphism


【解决方案1】:

你需要让你的函数是虚拟的,这样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;
    }
};

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-01
    • 2012-04-11
    • 1970-01-01
    • 1970-01-01
    • 2019-06-27
    • 1970-01-01
    相关资源
    最近更新 更多