我们都知道一个Animal以及Cat和Dog类的基本示例。但是我一无所获,例如,让我们说Animal是一个只有一个方法的纯抽象类:
virtual void sayHello() = 0;
然后我们创建Cat和Dog类,并且仍然需要在其类中覆盖该方法,所以它的主要目的是什么,因为现在我只能看到其他代码。 我有一个BankAccount类的示例,我们仅使用方法制作了两个纯虚拟类:一个冻结帐户,第二个发布有关存款的消息。然后,我们创建了SavingsAccount类,该类继承了前面提到的所有类,但仍然不得不覆盖这些纯虚拟方法。即使我使用外币CurencyAccount开设了另一个帐户(即另一个帐户),我仍然必须覆盖纯虚拟方法。那么制作这些纯虚拟类和方法的目的是什么?
答案 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。 ;)