"虚函数的定义和使用-谭浩强经典C"
需积分: 9 65 浏览量
更新于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++面向对象编程中重要的概念,它实现了多态性,使得程序能够根据实际对象类型调用相应的函数。通过在基类中定义虚函数,可以实现在派生类中重新定义函数并实现不同的功能。这样的设计提高了代码的灵活性和可扩展性,是面向对象编程中常用的技术之一。
2020-12-22 上传
2023-12-12 上传
2024-06-20 上传
2024-06-20 上传
2023-07-28 上传
2023-07-13 上传
2024-07-14 上传
![](https://profile-avatar.csdnimg.cn/d20ad284481647738892efe8b10d2419_weixin_42203424.jpg!1)
顾阑
- 粉丝: 15
- 资源: 2万+
最新资源
- AirKiss技术详解:无线传递信息与智能家居连接
- Hibernate主键生成策略详解
- 操作系统实验:位示图法管理磁盘空闲空间
- JSON详解:数据交换的主流格式
- Win7安装Ubuntu双系统详细指南
- FPGA内部结构与工作原理探索
- 信用评分模型解析:WOE、IV与ROC
- 使用LVS+Keepalived构建高可用负载均衡集群
- 微信小程序驱动餐饮与服装业创新转型:便捷管理与低成本优势
- 机器学习入门指南:从基础到进阶
- 解决Win7 IIS配置错误500.22与0x80070032
- SQL-DFS:优化HDFS小文件存储的解决方案
- Hadoop、Hbase、Spark环境部署与主机配置详解
- Kisso:加密会话Cookie实现的单点登录SSO
- OpenCV读取与拼接多幅图像教程
- QT实战:轻松生成与解析JSON数据