[英]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.