c++ - 使用子函数的继承函数

标签 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

最佳答案

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

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

关于c++ - 使用子函数的继承函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55329453/

相关文章:

C++根据成员 bool 值对 vector 中的对象进行排序

python - 为什么 `function` 不是 Python 中的关键字?

C++:错误:不允许间接非虚拟基类

c++ - 派生类中转换运算符为 "still valid"是什么意思

c++ - 具有非类型模板的结构的C++实例化

c++ - 使用 cmake 为 ARM 和 OpenCV 进行交叉编译

c++ - 使用boost的多线程一位读者和一位作者

c++ - start-stop-daemon 启动的 C 程序无法捕获信号

具有具体方法的Python抽象类

PHPUnit 模拟对象问题