【发布时间】:2018-02-08 14:58:01
【问题描述】:
一个 sn-p 可以说一千多个单词。有没有办法使以下工作,如果没有,为什么?
#include <iostream>
#include <string>
class ISquealer
{
public:
virtual void squeale() = 0;
};
class DefaultSqueel : public ISquealer // May be others
{
public:
virtual void squeale() override
{
std::cout << "Squeeaale!!";
}
};
class IAnimal : public ISquealer
{
public:
virtual std::string getName() = 0;
};
class Pig : public IAnimal, public DefaultSqueel
{
public:
virtual std::string getName() { return "Piggy"; }
};
int main()
{
Pig pig; // object of abstract type 'Pig' is not allowed
}
编辑:
只是为了澄清问题所在:这不会编译,因为编译器认为 Pig 是抽象的,因此即使 squeale 方法实际上是在 Pig 继承层次结构中实现的,也无法实例化。
【问题讨论】:
-
你没有说它工作时应该做什么。
-
你想达到什么目的? sn-p 坏了,所以当你不说它应该做什么时,没有办法“让它工作”
-
对不起,我添加了一个编辑来澄清。错误是当我假设抽象方法将由 DefaultSqueel 基类实现时,'Pig' 是抽象的。我想知道为什么会这样以及如何解决它。
-
是否故意将
squeale()在DefaultSqueel中设为私有? -
@tobi303 不,这是一个错误。不过好像没什么区别。
标签: c++ visual-c++ visual-studio-2015 multiple-inheritance