多态性在C_面向对象程序设计中的实现
多态性在C_面向对象程序设计中的实现
第 2卷第 4期 42以抖
河池学院学报J O U R N A L O F H E C H I U N IV E R S IT Y
V0 2 4 No 4 1. .
0年 1月
c Ot
,
洲 2峨) 4
二二二二二二二二二二二二二二二写
带
多态性在 C(1 2.
+
+
面向对象程序设计中的实现,
彭建盛万振武彭其圣河池学院物理系.
’,
,
广西,
宜州湖北。
546 3
0
;
.
中南民族大学+十
电信学院
武汉十+
43( 74 ) X
[摘
要1
多态性是面向对象程序设计语言 C,
的重要概念之一。
从C
多态性的四种实现方式各自特征提出
、
,
多态性在程序设计中的应用及对这四种实现方式进行比较关〔健词」多态性;类;虚函数;模板
〔图分类号」 n中
弓1 C 2
[文献标识码」
A
[文章编号」
16
2 7
一
0 9
2 1 (2 0科 ) ( 4 0
一
1 0 6
一
以
O
引言多态性就是不同的对象收到相同的消息时产生不同的动作,
。
即用同样的接口访问功能不同的函数从:
,
而实现一个接口多种方法
“
,
”。
在面向对象程序设计语言中多态性有两种基本形式编译时的多态性和运+
,
行时的多态性编译多态性主要通过,
。
C
+
语言中的重载机制来实现
。
重载包括函数重载和运算符重载C+
。
在同一个程++
序的同一个作用域中使用相同的名字定义两个或两个以上的样的标识符命名。
+
函数这样使得语义相近的函数使用同
,
在使用中由函数参数具体确定使用其函数。
。
运算符重载允许根据需要重新定义 C
语
言中已经有的运算符来实现的。
运行多态性是指必须在程序运行中才可以确定的多态性,,
。
运行多态性是通过类的继承和虚函数的使用。。
要产生运行时的多态性首先须设计一个类层次然后在某些类中使用虚函数。,,,
联编是实现面向对象多态性的基础,
虚函数与普通函数的区别在于函数实现的联编方式不同,
虚函数。
使用动态联编与静态联编相反程序编译时并不明确确定调用者与被调用者之间的关系他们之间的调用关系由运行程序的流程决定也就是一个函数调用应当执行哪一段程序代码在程序运行时才得以明确
在面向对象程序设计语言数1。,,
C
+
十
中多态性的实现方式强制多态重载多态类型参数化多态和虚函,。
,
:
、
、
其中类型参数化多态和包含多态称为一般多态性用来系统地
描述语义上相关的一组类型;强制多态
和重载态称为特殊多态性用来描述语义上无关联的类型间的关系
包含多态公有继承关系是一种包含关系。
派生类直接公有继承基类定义中的属性或服务如果一个程序段既能,。
,
处理基类的对象也能处理基类的派生类的对象该程序段称为多态程序段
C
+
+
采用虚函数实现包含
多态1 1.
。
虚函数
说明并在派生类中重新定义的函数利用虚函数进行动态束定必须用指向基类的指针或引用来访问它在编译阶段 C++的变量名或函数名就与相应的i v
虚函数也叫虚拟函数就是在基类中被关键字,,
,
u t r
l a
,
。
,
,
存储单元联系起来使用名字也就是使用对应的存储单元带[收稿日期」2 0抖 (
。
为了把变量名与相应的存储单元分开它用指针
,
o一o[作者简介」彭建盛 ( 19 9 7一
一
)男助教研究方向电子电路与通信系统设计计算机应用
,
,
,
:
,
。
多态性在C_面向对象程序设计中的实现
来调用虚函数因此只要改变指针所存地址的值也就间接地改变了调用对象利用虚函数可在基类和派生类中使用相同的函数名定义函数的不同实现从而实现一个接,
。
,
。
“
口
,
多种
方式1 2.
”
。
虚函数技术的实现虚函数技术的实现从技术上有三点要求一是在基类的函数声明前加上,,,,,
:
i t v r
a u l关键字表明该函数为
,
一个虚函数声明该声明表明该函数可以通过导出类对象实例的基类地址指针完成该对象实例的函数调用;二是使用晚绑定技术;最后在代码实现时各个导出类可以重写基类虚函数以便按自己的要求完成相应
功能也可以直接引用基类或上层类的已实现的虚函数功能1 3.
,
。
晚绑定的实现方法 i t a i当编译器遇到 v r u l关键字时为每个包含虚函数的类创建一张表通常称为虚函数表 ( v,,,
t r
a u l
a l t b
e
,
即 v T BL E ) A
r ) P R指向该对象实例的竹A B L在程序代码中通过基类指针 E调用该虚函数时编译器将自动插人该 V叮R指针并在 V T B比中查找该函数地址代码以便晚绑定时产 AP并用一个 v,
i t r n n e
指针(即
v
,
,
,
生正确的函数用
数则
,
T V
AB
比中存放的是实际运行时将调用的函数的地址如果导出类没有重定义基类的虚函,。
。
VT A B L E
中
存放的是基类的函数地址否则存放的是重定义后的函数地址V
r t P,
Cs h a p
e::
d
r a w
( )函数实体
m
C o lo r
S e t c o !O r
对象模型
对象实体r V Pt
( * d r“) (
州
Ce 1 r
e
l
e::
dr
衅 ( )函数实体
m m
.
e o
lo
.
n
Ra i d lo
Se t
eo
叹)
的导出类对象模型
Set R
d a
iu ( ) s
G e R a iu s ( ) t d
对象实例图J1 4.
带虚函数的++
C
十+
的对象模型,
虚拟析构函数
析构函数可以是虚函数显得很重要。
。
它是设计,,
C
应用程序的一个重要技巧特别在设计大型程序时类存的及,。
,
时释放是系统安全运行的保障否则可能会产生类存被耗尽的后果使程序无法执行,
所以虚拟析构函数u
v t r在基类中的析构函数被定义为虚函数以后派生类中的析构函数无论是否前面加关键字 i
l a
都为虚
拟析构函数1 5.
。
析构函数设计为虚函数就可以通过动态连接的方式调用,
,
。
纯虚函数和抽象类
在设计一个较大的软件项目时往往事先无法在基类中为虚函数给出明确的定义虚函数它的定义留给派生类来做,。
。
基类中说明一个纯。
这种做法实际上是为程序留下可扩充的接口,,,
。
通过将虚函数声明为纯虚函数一个类的设计者可以强迫它所有的派生类都必须给出自己具体的实现,
如果在派生类中没有重定义虚函数并给出具体实现那么这个函数在派生类中仍然是纯虚函数该派生类6 …… 此处隐藏:5779字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [教育文库]夜场KTV服务员的岗位职责及工作流程[1]
- [教育文库]企划、网络、市场绩效考核方案
- [教育文库]学党史、知党情、强党性--“党的基本理
- [教育文库]2016年高考物理大一轮总复习(江苏专版
- [教育文库]干部廉洁自律自查自纠的报告
- [教育文库]2010年北京大学心理学系拟录取硕士研究
- [教育文库]资金时间价值练习题及答案
- [教育文库]保护环境的心得体会
- [教育文库]英语角内容:英语趣味小知识
- [教育文库]档案收集与管理工作通知
- [教育文库]劳动规章制度范本范本
- [教育文库]高考物理一轮复习课后限时作业1运动的
- [教育文库]机械工艺夹具毕业设计195推动架设计说
- [教育文库]通用技术教学比赛说课稿2
- [教育文库]2018年四年级英语下册 Module 7 Unit 2
- [教育文库]第2章 宽带IP网络的体系结构
- [教育文库]九年级化学第五单元课题3《根据化学方
- [教育文库]小学英语六年级情态动词用法归纳
- [教育文库]甲级单位编制窑井盖项目可行性报告(立
- [教育文库]2016-2021年中国城市规划行业全景调研
- 高考英语听力十大场景词汇总结
- 全省领导班子思想政治建设座谈会会议精
- 人教版新课标高一英语提优竞赛试题 下
- 江西省2014年生物中考试题
- 长沙镇食品药品安全事故应急预案
- 《金刚石、石墨和C60》片段教学设计
- 福州教育学院(王旭东)
- 基于EDA音乐播放器的设计
- 9、古诗两首《夜书所见》《九月九日忆
- 小学语文课外阅读有效策略探讨
- 贵州文化产业发展成支柱产业的问卷调查
- 膀胱类癌的诊治体会(附3例报告)
- 发动机积碳产生的原因
- Configuring Code Composer Studio for
- 学生良好的心理素质如何培养点滴谈
- 46 电沉积法制备锂离子电池用硅-锂薄膜
- 美舍雅阁公司管理中各部门职责
- 去壳剥皮的小妙招
- 六自由度运动平台的仿真研究
- Pride and Prejudice(傲慢与偏见)




