假设我有一个基类A
和三个来自A
的派生类,称为类x
,y
,z
。现在,类x
有一个函数成员f
,我希望通过多态从类A
指针访问它。
我知道我还必须在类A
中定义相应的虚函数,否则,我会得到类似"class A has no member named f"
的错误。但是,如果我在A
中定义虚拟函数,我还需要在f
和y
中定义z
,否则会出现"y and z are of abstract class type"
的错误提高。但有时,f
就像一个仅与类x
相关的特征函数,在类y
和z
中定义没有任何意义,尽管我可以在{{y
中编写它。 1}}和z
没有提供任何内容。
我的问题是在上面的场景中,我该怎么办?
答案 0 :(得分:3)
从我所看到的,你有3个选择:
答案 1 :(得分:1)
但是,如果我在A中定义虚函数,我还需要在y和z中定义f,否则会引发一个错误,说“y和z是抽象类类型”。
这不正确。如果您在基类A中定义了一个虚函数,那么无论您是否在派生类中重写此函数,都应该编译好,除非您明确地将此虚函数设为纯函数。
如果这个基本虚函数不是纯函数,默认情况下会为对象y或z调用它,如果你不在这些类中覆盖它,这可以解决你的问题。
否则,我会避免向下投射。如果您的虚拟功能有问题,因为您的驱动类有太多独特的公共接口,那么它不是IS-A关系,是时候审查您的设计了。例如,对于共享功能,请考虑组合,而不是继承......