考虑以下代码片段:

#include <bits/stdc++.h>
using namespace std;

class Mammal;
class Operation;

class Animal{
    public:
        virtual void doOp(Operation* op) = 0;
};

class Mammal{
    public:
        void doOp(Operation* op){
            op->thisIsMammal(this);
        }
};

class Pig:  public Mammal, public Animal{

};

class Operation{
    public:
        void thisIsMammal(Mammal* mammal){
            cout << "This is a mammal!" << endl;
        }
};

int main(){
    Pig  pig;
    Operation op;
    pig.doOp(&op);
    return 0;
}


Animal类中声明了一个虚函数,需要在Pig类中重新定义。但是,Pig源自具有此功能定义的哺乳动物

我仍然收到错误消息,未在派生类中重新定义该函数。有什么方法可以使Mammal中的定义充分?

最佳答案

但是,Pig来自哺乳动物,它具有此功能的定义


不,不是。 Mammal不会覆盖功能Animal::doOp,因为Mammal不继承Animal

一个简单的解决方案是从Mammal派生Animal,并从Animal删除Pig基数:

class Mammal : public Animal {

class Pig :  public Mammal {

关于c++ - 在其他基类中重新定义了虚函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58755079/

10-13 09:26