【问题标题】:What benefit I will get to create an abstract class rather than the base class in CPP?创建一个抽象类而不是 CPP 中的基类我会得到什么好处?
【发布时间】:2014-11-03 19:07:42
【问题描述】:

在我们的项目 - C++ 中,我们有一个名为“ContentCache”的通用模块。从这个内容缓存中,我们派生了客户特定的内容缓存 - 例如 - Airtel、TataSky。例如,base contentCache 有方法——创建数据库表,存储基本信息。与airtel内容缓存有类似关系的其他类型的内容缓存是一种内容缓存。此 airtel 内容缓存是自定义的 - 覆盖了一些方法。但是,其余部分是相同的。在一些产品上,我们简单地使用泛型 - contentCache。我的问题是我们是否需要一个抽象类 - ContentCache - IcontentCache。此外,什么是好方法 - 创建一个抽象类或只创建一个通用基类。我们使用 IContentCache 有什么优势——即抽象类。我正在从设计模式的角度寻找答案。还有,编程的角度。

【问题讨论】:

    标签: c++ design-patterns


    【解决方案1】:

    通常,如果您定义了一些功能,那么您通常会使用抽象类,而这些功能只有在该类需要一些额外的、不可用的信息(或功能)才能工作时才能使用。不可用但需要的信息被定义为类的抽象方法,然后派生类提供额外的信息(或功能)。

    在您的示例中,如果您可以有用地拥有一个通用的ContentCache,那么它就不需要是抽象的。但是您可能有一个设计,其中 ContentCache 在不知道特定客户名称的情况下无法实例化。在这种情况下,您可以在抽象基类中定义所有缓存功能,并拥有一个提供客户名称的抽象方法。然后在派生类中提供返回该客户名称的实现,然后该类拥有创建缓存所需的一切。

    诚然,这不是一个很好的例子,因为您可以在类的构造函数中提供客户名称,但您提到在派生类中您“覆盖了一些方法”。如果这些方法提供了在不了解客户的情况下无法确定的功能,则它们可能是抽象的候选方法。

    【讨论】:

    • 另一个转折点是 contentCache 是单例的。因此,只能激活一种产品。
    • hmm.. 请参阅this question 关于单例继承。尽管我认为在您的特定实例中,您已经表明您不需要抽象基类,因为您自己使用了通用缓存。
    • no.. 我的问题是在这种情况下是否有抽象类。另外,如果有的话,有什么好处?我希望我的代码是可扩展的,并且尽可能通用。这就是为什么我正在寻找一个好的模式。
    【解决方案2】:

    抽象类比普通的基类要好。从设计的角度来看,当我们设计一个基类时,我们知道会有继承(虚函数)。因此,我们尝试收集基类中的常用函数,这些函数大多会在派生类中被覆盖。抽象意味着对外界隐藏实际的实现。我们的实现是我们的财富。所以基类只需要作为接口类的东西,它不应该有任何实现。

    1. 当您的派生类总是使用其派生类函数定义而不是使用基类定义时,抽象类对您有好处。

    2. 如果您打算将基类虚函数定义与派生类函数定义一起使用,普通基类将很有用。普通基类,它适用于小的继承级别。

    【讨论】:

      猜你喜欢
      • 2010-12-31
      • 1970-01-01
      • 1970-01-01
      • 2014-06-15
      • 1970-01-01
      • 1970-01-01
      • 2019-12-30
      • 2023-03-07
      • 2011-07-05
      相关资源
      最近更新 更多