如何解决如何在基类中使用派生类成员设计我需要的类?
通常,我们使用虚函数或组合来设计类。据我所知,使用虚函数会使类更加结构化;使用组合将很容易实现,但也许编写更多重复的代码。 在这种情况下:我需要一个解析器,它将用于不同的协议。现在,我想它将在名为AParser的A协议,名为BParser的B协议中使用,如下所示:
class Parser {
public:
Parser(...);
virtual ~Parser() = default;
virtual bool Parse(...) = 0;
private:
// some attributes may be common
};
class AParser() : public Parser {
public:
AParser(...) : Parser() {};
~AParser() override = default;
void bool Parser(...) override;
inline AData Data() const { return AData_;}
private:
AData_;
}
class BParser() : public Parser {
public:
BParser(...) : Parser() {};
~BParser() override = default;
void bool Parser(...) override;
inline BData Data() const { return BData_;}
private:
BData_;
}
好吧,AData
和BData
都是他们自己的私有数据,不应放在基类中,
也不应virtual AData/BData Data() = 0
(错误!!!)
那么,如何设计类来解决问题? 现在我有两个想法,但我认为他们不能令我满意
- 使用
static_cast<derived_class>(this)->derivedFunc()
,首先,此操作不太好,其次,如果我使用此操作,Inheritance + encapsulation
仍然有意义吗? - 使用
virtual std::map<std::string,void *> GetData() = 0
之类的通用函数,然后使用member field name
获取归档数据,但是如何使用派生功能仍然是一个问题?
我认为这个问题可能是课堂设计问题,请您帮我回答一下问题吧?
解决方法
如果两个解析器不返回相同的数据,则它们不具有相关接口,并且可能不应该具有公共基类。
如果它们确实返回相同的数据,则将GetData
函数放在基类中。或者更好的是,直接从Parse
返回数据。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。