【发布时间】:2011-11-15 21:26:37
【问题描述】:
所以在搜索了很多问题的答案后,我终于放弃了我的 Google 技能。
我有一个基类 Base 和一个派生类 Derived。我想用 Derived 类中的一个覆盖 Base 类中的一个类型。这是一个例子:
class Apple {
public:
Apple() { }
// ...
};
class Orange {
public:
Orange() { }
// ...
};
class Base {
public:
typedef Apple fruit;
// ...
virtual fruit func() { return Apple(); }
};
class Derived : public Base {
public:
typedef Orange fruit;
// ...
fruit func() override { return Orange(); } // <-- Error C2555!
};
这段代码不起作用,它给出了一个
C2555 error ('Derived::func': overriding virtual function return type differs and is not covariant from 'Base::func').
以上是我尝试过的解决方案之一。我还尝试在Base中创建一个虚拟嵌套类,并在Derived中重新定义,结果也没有编译(也很乱)。
我也不能从同一个基类派生 Apples 和 Oranges 来返回指向它们在 Base 和 Derived 中的父类的指针/引用。我需要物理返回该对象的一个实例。
- 有什么方法可以声明抽象类型定义?
- 如果没有,是否有任何其他解决方案可以实现我的目标 想做什么?
【问题讨论】:
标签: c++ inheritance overriding virtual typedef