繁体   English   中英

虚拟 function 在其他基类中重新定义

[英]Virtual function being redefined in other base classes

考虑这个代码片段:

#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 class 中声明的虚拟 function 需要在Pig class 中重新定义。 但是, Pig源自 Mammal,其定义为 function

我仍然收到一个错误,即 function 尚未在派生的 class 中重新定义。 有什么方法可以使Mammal中的定义足够?

但是,Pig 源自 Mammal,其定义为 function

不,它没有。 Mammal不会覆盖 function Animal::doOp因为Mammal不继承Animal

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

class Mammal : public Animal {

class Pig :  public Mammal {

您的代码中的Mammal不是从Animal派生的,因此它不能真正覆盖虚拟 function Animal::doOp() 代码中成员 function Mammal::doOp()的定义只定义了一个名为doOp()的非virtual function 。 它不会覆盖任何内容。

考虑使用override说明符(C++11 起)。

如果您在认为要覆盖Mammal中的doOp()时使用了override说明符,则在此阶段会出现编译错误,因为以下成员 function 定义不会覆盖doOp()

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM