【发布时间】:2011-05-14 20:09:31
【问题描述】:
我正在尝试创建一个用作基础对象的类,然后将其子类化(=实现)以服务于各种目的。
我想定义一个或多个纯虚函数,以便基类的子类是必需的,并且不会忘记实现它们。
有一个警告,纯虚函数的签名包括基础对象的类型。一旦子类化,函数定义当然不再匹配基类定义。例如:
class BaseItem
{
public:
virtual std::string getDifferences(const BaseItem& item) = 0;
}
所以,在派生类中我想做:
class DerivedClass : public BaseItem
{
public:
virtual std::string getDifferences(const DerivedClass& item) = 0;
private:
std::string derivedItemCustomObject;
}
编译器当然不会接受。我当然可以将其设为BaseItem,但是我不能在派生类中使用任何对象。
我必须使用强制转换来完成此操作吗?
如果我的意图/问题不清楚,请告诉我。
【问题讨论】:
-
是的,执行此操作的常用方法是将参数设为 BaseItem,并可能根据派生类的要求使用 dynamic_cast 进行转换。
-
@ybungalobill @BoPersson Look here.
-
@muntoo: look here
-
如果一个方法不应该被基类的接口调用,那么它就不应该存在于基类的接口中。如果 Base::getDifferences 的唯一原因是“不要忘记实现”,那么 Base::getDifferences 不应该存在。
-
@muntoo:您从 150 多个单词的问题中删除了一个(!)单词,并通过人们同意可以从大约 40 个问题中删除大约 30 个不必要单词的示例来支持它字...??更不用说这个词不是问候,而是一个“谢谢”。
标签: c++ inheritance