面试题答案
一键面试- 多态性的体现:
- 当
Animal* ptr = new Dog();
,通过ptr->speak();
调用speak
函数时,实际调用的是Dog
类中的speak
函数。这是因为在运行时,程序会根据指针实际指向的对象类型(即Dog
对象)来决定调用哪个类的speak
函数,而不是根据指针的静态类型(Animal
类型)。这种运行时根据对象实际类型来决定调用哪个函数版本的机制就是多态性的体现。
- 当
- 派生新类三个步骤对多态性实现的作用:
- 继承:
Dog
类从Animal
类派生,使得Dog
类拥有了Animal
类的成员(包括speak
函数),为多态性提供了基础。Dog
类可以基于Animal
类进行扩展和重写,并且可以将Dog
对象视为Animal
对象来使用,如上述Animal* ptr = new Dog();
这种赋值操作。 - 虚函数:
Animal
类中的speak
函数声明为虚函数。虚函数的存在使得在运行时可以根据对象的实际类型来动态绑定函数调用。如果speak
函数不是虚函数,那么ptr->speak();
调用的将是Animal
类中的speak
函数,而不是Dog
类中重写后的speak
函数,就无法实现多态。 - 重写:
Dog
类对Animal
类中的speak
函数进行重写(覆盖)。重写使得Dog
类有了自己特定的speak
函数实现,在运行时多态机制确定要调用Dog
类对象的speak
函数时,就会调用到这个重写后的版本,从而实现了不同派生类对象的不同行为,这是多态性在行为上的具体体现。
- 继承: