C++虚函数解析与示例

需积分: 10 0 下载量 96 浏览量 更新于2024-08-24 收藏 1.43MB PPT 举报
"本文主要探讨了C++中的虚函数机制及其重要性,通过实例展示了虚函数如何实现多态性,并简单介绍了C/C++语言的发展历程和特点。" 虚函数是C++中实现多态性的一个关键特性。在C++中,当一个基类声明某个成员函数为虚函数时,这个函数在所有派生类中都可以被重写。虚函数的作用在于: 1. 给出一个统一的接口:无论对象实际是什么类型,只要通过基类指针或者引用调用虚函数,就会执行对应对象实际类型所定义的版本。这使得程序能够以类型无关的方式处理对象,增强了代码的灵活性和可扩展性。 2. 设置基类指针:虚函数允许我们用基类指针来调用派生类的成员函数,这是实现动态绑定或晚期绑定的关键。即使基类指针指向的是派生类的对象,也能正确调用派生类中的函数。 3. 动态类型检查:虚函数使得我们可以根据运行时的对象类型来决定执行哪个函数,而不是在编译时就确定。这种机制在设计复杂的继承体系时非常有用。 以下是一个示例代码,演示了虚函数如何工作: ```cpp class B{ public: virtual void vf(){cout<<"Class B\n";} }; class D:public B{ public: void vf(){cout<<"Class D\n";} }; class E:public B{ public: void vf(){cout<<"Class E\n";} }; int main(){ B b, *pb; D d; E e; pb = &b; pb->vf(); // 输出 "Class B" pb = &d; pb->vf(); // 输出 "Class D" pb = &e; pb->vf(); // 输出 "Class E" } ``` 如果我们将`vf()`函数改为`vf(int a=4)`,并且在D类中没有重写带有默认参数的`vf()`函数,那么D类中的`vf()`就不再具有虚特性。此时,通过基类指针调用`vf()`会执行基类的版本,而不是派生类的版本。 如果删除B类中的`virtual`关键字,虚函数特性就会失效。在新的代码中,不论`pb`指向哪个对象,都会调用B类的`vf()`函数。 C/C++语言的发展历程始于60年代末的MULTICS项目,由肯·汤普逊(Ken Thompson)和丹尼斯·里奇(Dennis Ritchie)等人共同参与。由于项目进展缓慢,他们转而在PDP-7上开发了简化版的MULTICS,即UNIX操作系统。C语言由此诞生,最初是作为UNIX的开发工具。随着时间的推移,C语言逐渐标准化,成为了一种广泛应用的编程语言。在此基础上,Bjarne Stroustrup在1983年开发了C++,引入了类、模板等面向对象特性,进一步扩展了C语言的功能。 C++程序设计强调了C语言的结构化特性和汇编语言的效率,同时提供了面向对象编程的能力。它拥有丰富的运算符,支持数据的算术逻辑运算,以及函数指针等高级特性,适合开发各种规模和类型的软件。随着计算机技术的发展,C++也在不断地演进,以适应更多样化的编程需求。