我想用一个成员函数创建一个类,该函数引用另一个类,其中两个类都派生自抽象类。我收到一个编译器错误,指出类 Container 是抽象的,因为它没有实现 addElem()。
class Ielem
{
public:
virtual void action() = 0;
};
class Elem: public Ielem
{
public:
void action() {};
void extra() {};
};
class Icontainer
{
public:
virtual void addElem(Ielem &elem) = 0;
};
class Container: public Icontainer
{
public:
void addElem(Elem &elem) { elem.extra(); };
};
int main(int argc, char* argv[])
{
Elem e;
Container c;
c.addElem(e);
return 0;
}
看起来这应该可行,因为任何对 Elem 的引用也是对 Ielem 的引用。如果我让 Container::addElem 引用一个 Ielem,它就会编译。但是 Container::addElem() 不能调用 Elem::extra() 除非我使用 dynamic_cast,这在我正在使用的嵌入式编译器上不可用,或者常规转换,它不是类型安全的。
建议?