为什么不创建派生类的动态指针而不是基类?

时间:2016-01-13 03:46:23

标签: java c++ polymorphism

class horse{/*some data and functions*/}
class bird{/*some data and functions*/}
class pegasus : public horse, public bird
{}

如果上面有类,那么为什么我要创建如下所述的

1)horse *temp = new pegasus;

而是我会创建像

2)pegasus *temp = new pegasus;

在第二种方法中,我可以访问马和鸟的功能,所有功能包括非虚拟,在第一种方法中,我无法访问飞马对象的非虚函数。

1 个答案:

答案 0 :(得分:0)

当您需要将pegasus对象视为horse时,使用第一种方法,假装您不知道它也是bird。只要你能做到,你应该,因为它可以让你改变实现类而不改变任何其他东西。这称为编程接口

当您需要同时使用horse对象的birdpegasus方面时,可以使用第二种方法。这会对您可以分配给tmp的对象施加更严格的约束,因为它必须提供这两个类的实现。