"虚函数的定义和使用-谭浩强经典C"
需积分: 9 42 浏览量
更新于2023-12-27
收藏 8.81MB PPT 举报
虚函数的定义和使用-谭浩强经典C
虚函数是一种在程序运行时通过调用相同的函数名而实现不同功能的函数。在C++中,可以通过在函数定义前加上关键字virtual来定义虚函数。定义格式为:virtual <type> FuncName(<ArgList>);
一旦把基类的成员函数定义为虚函数,由基类所派生出来的所有派生类中,该函数均保持虚函数的特性。这意味着在派生类中重新定义基类中的虚函数时,可以不用再使用关键字virtual来修饰这个成员函数。这样的设计使得程序执行时能够调用合适的虚函数,实现了多态性。
C语言的发展历史
C语言的发展可以追溯到1946年第一台电子数字计算机ENIAC的问世。随着计算机应用领域的不断扩大,促进了计算机技术的高速发展,尤其是近年来计算机的硬件和软件都是日新月异。
作为应用计算机的一种工具—程序设计语言,C语言得到了不断的充实和完善。在20世纪60年代,Martin Richards为计算机软件人员开发系统软件时,开发了BCPL语言(Basic Combined Programming Language)作为记述语言。1970年,Ken Thompson在继承BCPL语言的许多优点的基础上发明了实用的B语言。
到了1972年,贝尔实验室的Dennis Ritchie和Brian kernighan在B语言的基础上发明了C语言。C语言因其高效性和可移植性,很快被广泛应用并成为了当时最流行的程序设计语言。
虚函数的使用举例
以下以一个简单的图形类来说明虚函数的使用。假设有一个基类Shape,它有一个虚函数draw(),然后有两个派生类Circle和Rectangle,它们分别重新定义了draw()函数。
```cpp
#include <iostream>
using namespace std;
class Shape {
public:
virtual void draw() {
cout << "Drawing a shape" << endl;
}
};
class Circle : public Shape {
public:
void draw() {
cout << "Drawing a circle" << endl;
}
};
class Rectangle : public Shape {
public:
void draw() {
cout << "Drawing a rectangle" << endl;
}
};
int main() {
Shape* shape;
Circle circle;
Rectangle rect;
shape = &circle;
shape->draw(); // Output: Drawing a circle
shape = ▭
shape->draw(); // Output: Drawing a rectangle
return 0;
}
```
在这个例子中,基类Shape定义了一个虚函数draw(),然后两个派生类Circle和Rectangle分别重新定义了draw()函数。在主函数中,通过基类指针分别指向不同的派生类对象并调用draw()函数,程序能够根据指向的对象类型调用对应的draw()函数,实现了多态性。
总结
虚函数是C++面向对象编程中重要的概念,它实现了多态性,使得程序能够根据实际对象类型调用相应的函数。通过在基类中定义虚函数,可以实现在派生类中重新定义函数并实现不同的功能。这样的设计提高了代码的灵活性和可扩展性,是面向对象编程中常用的技术之一。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2011-01-04 上传
2023-02-27 上传
2023-02-27 上传
2021-10-06 上传
点击了解资源详情
点击了解资源详情
顾阑
- 粉丝: 19
- 资源: 2万+
最新资源
- 全国江河水系图层shp文件包下载
- 点云二值化测试数据集的详细解读
- JDiskCat:跨平台开源磁盘目录工具
- 加密FS模块:实现动态文件加密的Node.js包
- 宠物小精灵记忆配对游戏:强化你的命名记忆
- React入门教程:创建React应用与脚本使用指南
- Linux和Unix文件标记解决方案:贝岭的matlab代码
- Unity射击游戏UI套件:支持C#与多种屏幕布局
- MapboxGL Draw自定义模式:高效切割多边形方法
- C语言课程设计:计算机程序编辑语言的应用与优势
- 吴恩达课程手写实现Python优化器和网络模型
- PFT_2019项目:ft_printf测试器的新版测试规范
- MySQL数据库备份Shell脚本使用指南
- Ohbug扩展实现屏幕录像功能
- Ember CLI 插件:ember-cli-i18n-lazy-lookup 实现高效国际化
- Wireshark网络调试工具:中文支持的网口发包与分析