如何在基类中使用派生类成员设计我需要的类?

乌鸦

通常,我们使用虚函数或组合来设计类。据我所知,使用虚函数会使类更加结构化;使用组合将很容易实现,但也许编写更多重复的代码。在这种情况下:我需要一个解析器,它将用于不同的协议。现在,我假设它将在名为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(错误!!!)

那么,如何设计类来解决问题呢?现在我有两个主意,但我想他们不能让我满意

  1. 使用static_cast<derived_class>(this)->derivedFunc(),首先此操作不太好,其次,如果我使用此操作,是否Inheritance + encapsulation仍然有意义?
  2. 使用通用函数(例如)virtual std::map<std::string, void *> GetData() = 0,然后使用member field name来获取字段数据,但是如何使用派生功能仍然是一个问题?

我认为这个问题可能是课堂设计问题,请您帮我回答这个问题?

塞巴斯蒂安·雷德尔(Sebastian Redl)

如果两个解析器不返回相同的数据,则它们将不具有相关的接口,并且可能不应该具有公共的基类。

如果它们确实返回相同的数据,则将GetData函数放在基类中。或者更好的是,直接从返回数据Parse

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在基类构造函数中使用派生类成员

来自分类Dev

在派生类中使用/存储派生成员和存储基成员的基类

来自分类Dev

为什么在C ++中使用基类指针无法到达派生类的成员函数?它的设计思想是什么?

来自分类Dev

如何在派生类数据中使用基类进行比较

来自分类Dev

从使用派生类成员函数的基类调用函数

来自分类Dev

如何在派生类构造函数中初始化基类成员变量?

来自分类Dev

如何在派生类中初始化基类staic内联数据成员?

来自分类Dev

在派生类中使用基类typedef

来自分类Dev

在基类中使用派生类对象

来自分类Dev

如何在baseclass方法中使用派生类变量

来自分类Dev

如何在列表派生类中使用列表理解

来自分类Dev

如何使用多态性从基类访问派生类向量成员?

来自分类Dev

如何使用基类函数访问派生类成员函数?

来自分类Dev

如何使用基类的数据成员作为派生类的构造函数?(在 C++ 中)

来自分类Dev

如何在基类中使用派生类属性?C#

来自分类Dev

当派生类的数据成员从其基类的数据成员继承时,如何防止不需要的行为?

来自分类Dev

我如何从另一个类的基类访问派生类中的受保护成员

来自分类Dev

即使派生类没有成员变量,我是否需要重新实现基类的所有构造函数?

来自分类Dev

如何使用派生类序列化基类

来自分类Dev

如何使用基类的指针形成派生类对象?

来自分类Dev

c ++设计:无需额外的数据成员即可从基类转换为派生类

来自分类Dev

我如何在基类中为派生类函数做朋友?

来自分类Dev

在C#中的基类中使用泛型:如何确保基类中的方法返回派生类的类型?

来自分类Dev

为什么C ++不允许派生类在初始化列表中使用基类成员?

来自分类Dev

从基类指针访问派生类成员

来自分类Dev

Python:在派生类中隐藏基类的成员

来自分类Dev

从基类的指针访问派生类的成员

来自分类Dev

从派生类访问基类中的受保护成员

来自分类Dev

派生类是否被视为基类的成员?

Related 相关文章

  1. 1

    如何在基类构造函数中使用派生类成员

  2. 2

    在派生类中使用/存储派生成员和存储基成员的基类

  3. 3

    为什么在C ++中使用基类指针无法到达派生类的成员函数?它的设计思想是什么?

  4. 4

    如何在派生类数据中使用基类进行比较

  5. 5

    从使用派生类成员函数的基类调用函数

  6. 6

    如何在派生类构造函数中初始化基类成员变量?

  7. 7

    如何在派生类中初始化基类staic内联数据成员?

  8. 8

    在派生类中使用基类typedef

  9. 9

    在基类中使用派生类对象

  10. 10

    如何在baseclass方法中使用派生类变量

  11. 11

    如何在列表派生类中使用列表理解

  12. 12

    如何使用多态性从基类访问派生类向量成员?

  13. 13

    如何使用基类函数访问派生类成员函数?

  14. 14

    如何使用基类的数据成员作为派生类的构造函数?(在 C++ 中)

  15. 15

    如何在基类中使用派生类属性?C#

  16. 16

    当派生类的数据成员从其基类的数据成员继承时,如何防止不需要的行为?

  17. 17

    我如何从另一个类的基类访问派生类中的受保护成员

  18. 18

    即使派生类没有成员变量,我是否需要重新实现基类的所有构造函数?

  19. 19

    如何使用派生类序列化基类

  20. 20

    如何使用基类的指针形成派生类对象?

  21. 21

    c ++设计:无需额外的数据成员即可从基类转换为派生类

  22. 22

    我如何在基类中为派生类函数做朋友?

  23. 23

    在C#中的基类中使用泛型:如何确保基类中的方法返回派生类的类型?

  24. 24

    为什么C ++不允许派生类在初始化列表中使用基类成员?

  25. 25

    从基类指针访问派生类成员

  26. 26

    Python:在派生类中隐藏基类的成员

  27. 27

    从基类的指针访问派生类的成员

  28. 28

    从派生类访问基类中的受保护成员

  29. 29

    派生类是否被视为基类的成员?

热门标签

归档