在CPP中创建抽象类而不是基类会有什么好处?

时间:2014-11-03 10:46:59

标签: c++ design-patterns

在我们的项目--C ++中,我们有一个名为" ContentCache"的通用模块。从这个内容缓存中,我们得出了客户特定的contentcache - 例如 - Airtel,TataSky。例如,基本contentCache有方法 - 创建数据库表,存储基本信息。具有像airtel内容缓存之类的关系的其他类型的contentcache是​​一种contentcache。这个airtel内容缓存是自定义的 - 覆盖了一些方法。但是,其余部分是相同的。在一些产品上,我们只使用泛型 - contentCache。我的问题是我们需要一个抽象类 - ContentCache - IcontentCache。另外,有什么好方法 - 创建一个抽象类或只创建一个通用基类。我们使用IContentCache(即抽象类)有什么好处。我从设计模式的角度来看待答案。另外,编程的观点。

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

抽象类优于普通基类。从设计的角度来看,当我们设计基类时,我们知道会有继承(虚函数)。因此,我们尝试收集基类中的常用函数,这些函数主要是在派生类中过度使用。抽象意味着从外部世界隐藏实际的实现。我们的实现是我们的财富。所以基类只需要作为一种接口工作,它不应该有任何实现。

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

  2. 如果要将基类虚函数定义与派生类函数定义一起使用,则普通基类将非常有用。正常的基类对小的继承级别有好处。