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

mre*_*555 4 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() {}
Run Code Online (Sandbox Code Playgroud)

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

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

duf*_*ymo 5

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

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

接口没有这种选择。需要使用实现接口的类来实现其所有方法。

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

C ++接口是具有所有virtual方法以及纯虚拟析构函数的类。

要从实现中分离接口时,可以使用抽象类和接口。当您知道有多种实现可供选择时,或者在编写允许客户端插入其自己的实现的框架时,它们很有用。该界面提供了希望客户遵守的合同。