Jav*_*ier -1 c++ inheritance abstract-class virtual-functions multiple-inheritance
我C2259实例化从其他类继承的类时出现编译器错误,这些类具有抽象方法。
继承方案有点怪异和不透明,但由于问题的某些限制,我需要以这种方式进行操作。
继承方案如下:
class A
{
public:
enum Animal { CAT, DOG };
enum Color { RED, GREEN };
enum Food { MEAT, FISH };
protected:
virtual Animal animal() const = 0;
virtual Color color() const = 0;
virtual Food food() const = 0;
};
class B: public A
{
Animal animal() const { return CAT; }
};
class C: public A
{
Color color() const { return GREEN; }
};
class D: public A
{
Food food() const { return FISH; }
};
Run Code Online (Sandbox Code Playgroud)
然后,我声明一个具有多重继承的类,如下所示:
class E : public B, public C, public D
{
};
Run Code Online (Sandbox Code Playgroud)
在这里,当我尝试实例化类E时,出现编译器错误C2259:
class A
{
public:
enum Animal { CAT, DOG };
enum Color { RED, GREEN };
enum Food { MEAT, FISH };
protected:
virtual Animal animal() const = 0;
virtual Color color() const = 0;
virtual Food food() const = 0;
};
class B: public A
{
Animal animal() const { return CAT; }
};
class C: public A
{
Color color() const { return GREEN; }
};
class D: public A
{
Food food() const { return FISH; }
};
Run Code Online (Sandbox Code Playgroud)
我做错了什么?
非常感谢你
哈维尔
A里面有3个不同的对象E,忘记了将继承标记为虚拟,因此使用了相同的A对象:
class A
{
public:
enum Animal { CAT, DOG };
enum Color { RED, GREEN };
enum Food { MEAT, FISH };
virtual ~A(){}
protected:
virtual Animal animal() const = 0;
virtual Color color() const = 0;
virtual Food food() const = 0;
};
class B: public virtual A
{
Animal animal() const override { return CAT; }
};
class C: public virtual A
{
Color color() const override { return GREEN; }
};
class D: public virtual A
{
Food food() const override { return FISH; }
};
class E : public B, public C, public D
{
};
int main()
{
E e;
}
Run Code Online (Sandbox Code Playgroud)