c++ - 什么时候使用抽象类有意义

标签 c++ oop abstract-class

我正在从 C 过渡到 C++,当然还有 OOP,事实证明这比预期的要困难。困难不在于理解类和继承的核心机制,而在于如何使用它。我读过关于设计模式的书,但它们只展示了技术,并模糊地描绘了为什么应该使用这些技术。我真的很难找到抽象类的用途。以下面的代码为例。

class baseClass {
public:
    virtual void func1() = 0;
    virtual void func2() = 0;
};
class inhClass1 : baseClass {
public:
    void func1();
    void func2();
};
class inhClass2 : baseClass{
public:
    void func1();
    void func2();
};
int main() {}

我经常在设计书籍中看到这样设置的抽象类。我知道通过这种配置,继承的类可以访问基类的公共(public)成员。我知道虚函数是继承类的占位符。问题是我仍然不明白这有什么用。我试图将它与重载函数进行比较,但我只是没有看到实际用途。

我真正想要的是有人能给出最简单的例子来说明为什么抽象类实际上是有用的,并且是针对某种情况的最佳解决方案。不要误会我的意思。我并不是说没有好的答案。我只是不明白如何正确使用它们。

最佳答案

抽象类和接口(interface)都允许您定义子类期望实现的方法签名:名称、参数、异常和返回类型。

抽象类可以提供默认实现如果存在合理的实现。这意味着子类不必实现这样的方法;如果他们愿意,他们可以使用默认实现。

接口(interface)没有这样的选项。实现接口(interface)的类需要来实现它的所有方法。

在 Java 中,区别很明显,因为该语言包含关键字 interface

C++ 接口(interface)是具有所有虚拟 方法和纯虚拟析构函数的类。

当您希望将接口(interface)与实现分离时,可以使用抽象类和接口(interface)。当您知道您将有多种实现可供选择时,或者当您正在编写一个允许客户端插入他们自己的实现的框架时,它们很有用。该接口(interface)提供了客户应遵守的契约(Contract)。

关于c++ - 什么时候使用抽象类有意义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42603558/

相关文章:

c++ - 引用类类型 vector 中对象的成员

c++ - 在 C++ 类继承中使用函数

c# - 为什么我的抽象基类会出现这个编译错误?

python-3.x - 您如何用mypy注释抽象类的类型?

c++ - 完善转发模板功能

c++ - 中途反转/交换

c++ - 大小为 0 的对象

javascript - 从 Javascript 的回调函数中调用对象函数

java - 从数组中减去不起作用

c# - 没有从 <T> 到 'Microsoft.WindowsAzure.Storage.Table.ITableEntity' 的装箱转换或类型参数转换