纯抽象类的应用是什么? C ++

时间:2018-11-08 12:32:08

标签: c++ class virtual

我们都知道一个Animal以及Cat和Dog类的基本示例。但是我一无所获,例如,让我们说Animal是一个只有一个方法的纯抽象类:

    virtual void sayHello() = 0;

然后我们创建Cat和Dog类,并且仍然需要在其类中覆盖该方法,所以它的主要目的是什么,因为现在我只能看到其他代码。 我有一个BankAccount类的示例,我们仅使用方法制作了两个纯虚拟类:一个冻结帐户,第二个发布有关存款的消息。然后,我们创建了SavingsAccount类,该类继承了前面提到的所有类,但仍然不得不覆盖这些纯虚拟方法。即使我使用外币CurencyAccount开设了另一个帐户(即另一个帐户),我仍然必须覆盖纯虚拟方法。那么制作这些纯虚拟类和方法的目的是什么?

2 个答案:

答案 0 :(得分:1)

一个目的是让您可以编写多态代码。

您现在可以编写一个不需要知道它是哪种动物的函数, 每个动物的sayHello()代码可能会有非常不同的实现,因此在Animal的子类之间共享是没有意义的。

void doSomething(Animal &animal)
{
    animal.sayHello();
}

但是,如果每个动物都具有相同的sayHello()实现,那么使该方法成为纯虚拟方法就没有多大意义。

答案 1 :(得分:0)

它使您可以独立于继承的类的动态类型来使用它们。

struct Base
{
    virtual void f() const = 0;
}
struct Derived1 : Base
{
    void f() const override { /* impl */ }
}
struct Derived2 : Base
{
    void f() const override { /* impl */ }
}

void g(Base const& b)
{
    b.f();
}

如您所见,g()不在乎绑定到b的对象实际上是Derived1还是Derived2。尽管如此,它仍调用其成员函数f()。虚拟机制会调用适当的f()函数。

有大量实际应用,陷阱等。您应该真正得到good C++ book。 ;)