目录
解释什么是动态绑定(dynamic binding)与静态绑定(static binding)。
如果基类的函数是虚函数,派生类的对应函数是否需要再次声明为虚函数?
如果基类的虚函数没有被派生类覆盖,那么派生类对象调用该函数时会发生什么?
如果派生类覆盖了基类的虚函数,是否可以调用基类版本的虚函数?请举例。
如果基类的析构函数是虚函数,派生类的析构函数是否必须也是虚函数?
为什么在面向对象编程中,基类的析构函数通常应该声明为虚函数?
什么是虚函数?它的作用是什么?
虚函数是在基类中使用关键字 virtual
声明的成员函数。当在派生类中重写(override)这个函数时,会根据对象的实际类型来调用相应的函数版本,而不是仅仅根据指针或引用的类型来决定调用哪个函数。
其主要作用是实现多态性。多态允许不同的对象对同一消息做出不同的响应,增强了程序的灵活性和可扩展性。例如,有一个基类 Shape
,它有一个虚函数 draw()
,然后派生出 Circle
和 Rectangle
等子类。每个子类都可以根据自身的特点重写 draw()
函数。当通过基类指针或引用调用 draw()
函数时,会根据实际指向的对象类型来调用相应子类的 draw()
函数,而不是统一调用基类的 draw()
函数,这样就