C++语言中多态性的分析
面向对象程序设计语言C++中多态性的实现方式

1 包 含 多 态
在 C ++中公 有 继承关 系是一 种包 含关 系 派生 类直接 公 有继承基 类定 义 中的属 性 或服务 , 如果 1 个程序 段 既能处 理基 类 的对 象 也能处 理基类 的派 生类 的对象 , 程 序段称 为多态 程 序 段 c++采 用虚 该 函数 实现包 含 多态 一个 函数一 旦声 明为 虚函数 , 编译 阶段 , 译器并 不 按 照 它 的静 态 类 型为 它 生成 在 编
调用此 函数 的 版本 , 而只为 它生 成虚 函数 表 ( 中存放 与 此 函数 同名 、 表 同参 数 、 返 回值 的 虚 函 数 的地 同 址 )在 程序 运行 时 , 根据 实 际对象 的类型 , . 再 查虚 函数表 , 出相应版本 的函数 后 , 能使 用它 因此 , 找 才 这 种不是 在 编译 阶段而 是在 运行 阶段动 态确定 应使用 哪一 个虚 函数 的方 式 叫动 态束定 . 要 把一 个 函数 声 明为虚 函 数 , 只要 在原 函数 的声 明之 前加上 v tl 键 字 即 可 利 用 虚 函数进 行 动 iu关 r
维普资讯
20 0 2年第 2 期 第 5卷 ( 1 期 ) 总 5
J u rl西 安联 台Un t学报 e ̄t o r fXial 大学 dUmv r y  ̄ o ’l i e
. No 2 5
Ap .2 0 r 02
文章 编号 :0 877 2 0 }20 6—5 10 —7 X(0 2 0 0 00
/胄 明为虚 函数 /
【efi . ;} ; rti 0 } q- O l l i
c八股文面试题

c八股文面试题
以下是有关C语言“八股文”面试题的一些示例:
1. 请简述C语言中指针的概念及作用。
2. 描述C语言中内存的分配方式。
3. 什么是C语言的函数?请简要说明函数在程序中的作用。
4. 请解释C语言中的位运算符,并给出相应的应用场景。
5. C语言中结构体是什么?它与联合有何区别?
6. 请简述C语言中内存管理的机制,并举例说明其作用。
7. C语言中的多态性是如何实现的?请举例说明。
8. 什么是C语言的预处理器指令?请举例说明其用法。
9. 请解释C语言中的递归函数,并给出相应的应用场景。
10. C语言中的全局变量和局部变量有什么区别?请举例说明。
以上问题仅供参考,实际面试中,面试官会根据面试者的简历和实际情况进行提问,难度和深度也会有所不同。
建议在面试前做好充分准备,深入理解C语言的基础知识和常用概念,以提高面试通过率。
最新全国计算机等级考试二级c++题库5(共17套)

第五套第五套1、有三个关系R 、S 和T 如下:由关系由关系R R 和S 通过运算得到关系通过运算得到关系T T ,则所使用的运算为,则所使用的运算为__________________。
A 、笛卡尔积、笛卡尔积B 、交、交C 、并、并D 、自然连接笛卡尔积:笛卡尔积:设关系设关系R R 和S 的元数分别是的元数分别是r r 和s ,定义定义R R 和S 的笛卡尔积是一个的笛卡尔积是一个(r+s)(r+s)(r+s)元元组的集合,元元组的集合,元元组的集合,每一个元组的每一个元组的前r 个分量来自个分量来自R R 的一个元组,后的一个元组,后s s 个分量来自个分量来自S S 的一个元组。
若的一个元组。
若R R 有k1k1个元组,个元组,个元组,s s 有k2k2个元组,则关系个元组,则关系个元组,则关系R R 和关系和关系S S 的广义笛卡尔积有广义笛卡尔积有k1k1k1××k2k2个元组。
个元组。
个元组。
交:设关系交:设关系交:设关系R R 和关系和关系S S 具有相同的目具有相同的目n n ,且相应的属性取自同一个域,则关系R 与关系与关系S S 的交由属于的交由属于R R 又属于又属于S S 的所有元组组成。
的所有元组组成。
并:设关系并:设关系并:设关系R R 和关系和关系S S 具有相同的目具有相同的目n n (即两个关系都有(即两个关系都有n n 个属性),且相应的属性取自同一个域,则关系R 与关系与关系S S 的并由属于的并由属于R R 或属于或属于S S 的元组组成。
的元组组成。
自然连接:是一种特殊的等值连接,它要求两个关系中进行比较的分量必须有相同的属性组,并且要在结自然连接:是一种特殊的等值连接,它要求两个关系中进行比较的分量必须有相同的属性组,并且要在结果中把重复的属性去掉。
果中把重复的属性去掉。
故本题答案为D 。
2、在长度为n 的有序线性表中进行二分查找,最坏情况下需要比较的次数是____________。
C语言数据结构

插入类排序法有:简单插入法、希尔排序法
插入排序是指将无序序列中的各元素依次插入到已经有序的线性表中。且在每一次比较后最多移掉一个逆序,因此,与冒泡排序法相同,在最坏情况下,简单插入排序法需要n(n-1)/2次比较。
希尔排序法的效率与所选取的增量序列有关。在最坏情况下,希尔排序法所需要的比较次数为O(n*1.5)。n的1.5次幂
有且只有一个根结点(有且只有一个终端结点);
每一个结点最多有一个前件,也最多有一个后件。
则称该数据结构为线性结构。线性结构又称线性表。但特别需要说明的是,在一个线性结构中插入或删除任何一个结点后还应该是线性结构。线性结构和非线性结构都可以是空的数据结构。
矩阵、栈、队列都是线性表。(矩阵是较复杂的线性表,既可以把每一行看成一个数据元素,也可以把每一列看成是一个数据元素)
数据结点。每一个数据元素用中间标有元素值的方框表示,称之为数据结点并简称结点。为了进一步表示各数据元素之间的关系,用一条有向线段吧从前件结点指向后件结点。
没有前件的结点成为根结点;没有后件的结点称为终端结点(叶子结点)
*考点五 线性结构和非线性结构
线性结构:
如果一个非空的数据结构满足下列两个条件:
数据结构与算法
1.1算法
考点一 算法的基本概念
算法是指解题方案的准确而完整的描述。
算法的基本特征:可行性、确定性、有穷性和拥有足够的情报
算法的两要素:一是对数据对象的运算和操作(算术、逻辑、关系运算等),二是算法的控制结构。算法的主要特征是着重于算法的动态执行。算法的控制结构不仅决定了算法中各操作的执行顺序,而且也直接反映了算法的设计是否符合结构化原则。
*考点七 线性表的顺序存储结构
C语言中的多态

C语⾔中的多态⼀、多态的主要特点1、继承体系下。
继承:是⾯向对象最显著的⼀个特性。
继承是从已有的类中派⽣出新的类,新的类能吸收已有类的数据属性和⾏为,并能扩展新的能⼒,已有类被称为⽗类/基类,新增加的类被称作⼦类/派⽣类。
2、⼦类对⽗类的虚函数进⾏重写。
3、虚表。
在⾯向对象语⾔中,接⼝的多种不同现⽅式即为多态。
同⼀操作作⽤于不同的对象,可以有不同的解释,产⽣不同的执⾏结果,这就是多态性。
简单说就是允许基类的指针指向⼦类的对象。
⼆、代码实现1、C++中的继承与多态1 class Base2 {3 public:4 virtual void fun() {} //基类函数声明为虚函数5 int B1;6 };7 class Derived :public Base //Derived类公有继承Base类8 {9 public:10 virtual void fun() { //函数重写,此时基类函数可以声明为虚函数,也可以不声明11 cout << "D1.fun" << endl;12 }13 int D1;14 };15 int main(){16 Base b1; //创建⽗类对象17 Derived d1;//创建⼦类对象1819 Base *p1 = (Base *)&d1;//定义⼀个⽗类指针,并通过⽗类指针访问⼦类成员20 p1->fun();2122 Derived *p2 = dynamic_cast<Derived*> (&b1); //dynamic_cast⽤于将⼀个⽗类对象的指针转换为⼦类对象的指针或引⽤(动态转换)23 p2->fun();2425 getchar();26 return 0;27 }2. C语⾔实现C++的继承与多态1 typedef void(*FUNC)(); //定义⼀个函数指针来实现对成员函数的继承2 struct _Base //⽗类3 {4 FUNC _fun;//由于C语⾔中结构体不能包含函数,故借⽤函数指针在外⾯实现5 int _B1;6 };7 struct _Derived//⼦类8 {9 _Base _b1;//在⼦类中定义⼀个基类的对象即可实现对⽗类的继承10 int _D1;11 };12 void fb_() //⽗类的同名函数13 {14 printf("_b1:_fun()\n");15 }16 void fd_() //⼦类的同名函数17 {18 printf("_d1:_fun()\n");19 }20 int main() {21 _Base _b1;//定义⼀个⽗类对象_b122 _Derived _d1;定义⼀个⼦类对象_d12324 _b1._fun = fb_;//⽗类的对象调⽤⽗类的同名函数25 _d1._b1._fun = fd_;//⼦类的对象调⽤⼦类的同名函数2627 _Base *_p1 = &_b1;//定义⼀个⽗类指针指向⽗类的对象28 _p1-> _fun(); //调⽤⽗类的同名函数2930 _p1 = (_Base *)&_d1;//让⽗类指针指向⼦类的对象,由于类型不匹配所以要进⾏强转31 _p1->_fun(); //调⽤⼦类的同名函数3233 getchar();34 return 0;35 }。
C--程序设计--第10章-多态性及虚函数

使用重载函数注意:
不要使用重载函数描述不相干的函数 在类中,构造函数和普通成员函数均可以
重载 避免与函数的默认参数产生二义性
二、运算符重载
运算符重载(operate overloading)就是 赋予已有的运算符多重含义。
运算符重载实质是函数重载,运算符重载 的选择与函数重载类似,会根据运算符的 操作数的类型、个数和顺序来进行运算符 函数的选择。
#include<iostream.h> str#iinngc:l:usdter<isntgr(icnhga.rh>*s) v{}ossccsssc{s{{ittohtttolsstlsssls*drruarrrueptrepttepsi1trii3tc{pn=rin=rrn=pmn.<nn.<lprgncngncign=agp<*ggp<auitepgtepnte'irssrssbv\hwy:hwyghwnsit1ssitsla0=(:=(:=(tnr=ttnrit'scssscs:sc)rt1"rrt3scesss~ivci;thpt1hpsih1(.T23(.t::tttsnohn}ra,r.a,tza()gh(()grrrrttiatlrsilrsrer";eass;eiiiirdre[)ne[1i;[Ttt1ttnnnniglnl;gnl.nlhl)rlggggnep*e(e}(gesgeiei;2e(((gtrsnsnstnp(nsns)ncsi(lipg)gthg)ig(;(htn)en;t;tr;t;nti)a)artnthhih}ths<<ri{((;+n++<p<snd))}1g1s1aere*ige;]]i]nonszl{{;&;z;ddgd)&eercseelrl;s=teo1)m;a;/18etu)om/)0ut..;)构sr<""/;pn<造);//;s;/复}lp函构e<制n<数造ge构tn函hd造;l数};重} 载
二级C语言分类模拟题529_真题(含答案与解析)-交互

二级C语言分类模拟题529(总分47.5, 做题时间90分钟)选择题1.在C语言中,char型数据在内存中的存储形式为______。
SSS_SINGLE_SELA 反码B 补码C ASCII码D 原码分值: 2答案:C2.下列叙述中,正确的是______。
SSS_SINGLE_SELA 软件交付使用后还需要进行维护B 软件一旦交付使用就不需要再进行维护C 软件交付使用后其生命周期就结束D 软件维护是指修复程序中被破坏的指令分值: 1答案:A3.有下列程序:#include<stdio.h>main(){ int a=6,b=7,m=1;switch(a%2){ case 0:m++;break;case 1:m++;switch(b%2){ defaut:m++;case0:m++;break;}}printf("%d\n",m);}程序运行后的输出结果是 ____ 。
SSS_SINGLE_SELA 1B 2C 3D 4分值: 1[解析] 本题考查switch语句。
第一个switch语句,因为a=6,a%2=0,所以执行case0.将m加1,遇到break语句跳出switch语句,结束循环。
4.下列合法的声明语句是______。
SSS_SINGLE_SELA int _abc=50;B double int=3+5e2.5;C long do=1L;D float 3_asd=3e-3;分值: 1答案:A[解析] 标识符是由字母、数字或下划线组成,并且它的第一个字符必须是字母或下划线。
B选项int不是表达变量类型的标识符,它不能再用做变量名和函数名。
C选项do是C语言的一个关键字。
D选项标识符只能以字母或下划线开始。
5.以下选项中叙述正确的是______。
SSS_SINGLE_SELA char c1,c2,*c3,c4[40j;是合法的变量定义语句B 数组说明符的一对方括号中只能使用整型常量,而不能使用表达式C 数组下标的下限可以是负值D 若有数组定义float array[4];则语句printf("%f",array[3.12]);是合法的分值: 1答案:A[解析] A选项正确定义了字符变量c1、c2,字符型指针c3,字符型一维数组c4[40],A选项正确。
50个C语言C++常见面试题及答案

C/C++经典面试题面试题1:变量的声明和定义有什么区别为变量分配地址和存储空间的称为定义,不分配地址的称为声明。
一个变量可以在多个地方声明,但是只在一个地方定义。
加入extern修饰的是变量的声明,说明此变量将在文件以外或在文件后面部分定义。
说明:很多时候一个变量,只是声明不分配内存空间,直到具体使用时才初始化,分配内存空间,如外部变量。
面试题2:写出bool 、int、float、指针变量与“零值”比较的if语句bool型数据:if( flag ){A;}else{B;}int型数据:if( 0 != flag ){A;}else{B;}指针型数:if( NULL == flag ){A;}else{B;}float型数据:if ( ( flag >= NORM ) && ( flag <= NORM ) ){A;}注意:应特别注意在int、指针型变量和“零值”比较的时候,把“零值”放在左边,这样当把“==”误写成“=”时,编译器可以报错,否则这种逻辑错误不容易发现,并且可能导致很严重的后果。
面试题3:sizeof和strlen的区别sizeof和strlen有以下区别:❑sizeof是一个操作符,strlen是库函数。
❑sizeof的参数可以是数据的类型,也可以是变量,而strlen只能以结尾为‘\0‘的字符串作参数。
❑编译器在编译时就计算出了sizeof的结果。
而strlen函数必须在运行时才能计算出来。
并且sizeof 计算的是数据类型占内存的大小,而strlen计算的是字符串实际的长度。
❑数组做sizeof的参数不退化,传递给strlen就退化为指针了。
注意:有些是操作符看起来像是函数,而有些函数名看起来又像操作符,这类容易混淆的名称一定要加以区分,否则遇到数组名这类特殊数据类型作参数时就很容易出错。
最容易混淆为函数的操作符就是sizeof。
面试题4:C语言的关键字static 和C++ 的关键字static 有什么区别在C中static用来修饰局部静态变量和外部静态变量、函数。
计算机二级(C++)4_真题-无答案

计算机二级(C++)4(总分1780,考试时间90分钟)选择题(每小题2分,共70分) 下列各题四个选项中,有一个是正确的,请选择正确答案。
1. 下面的哪个选项不能作为函数的返回类型?A. voidB. intC. newD. long2. 有如下程序#include<iostream.h>void main( ){float x=2.0,y;if(x<0.0)y=0.0;else if(x<10.0)y=1.0/x;else y=1.0;cout <<y;}该程序的输出结果是()。
A. 0B. 0.25C. 0.5D. 1.03. 决定C++语言中函数的返回值类型的是()。
A. return语句中的表达式类型B. 调用该函数时系统随机产生的类型C. 调用该函数时的主调用函数类型D. 在定义该函数时所指定的数据类型4. 关于虚函数下面说的正确的是A. 可以被三种类所引用:该类自身、与它在同一个包中的其他类、在其他包中的该类的B. 可以被两种类访问和引用:该类本身、该类的所有子类C. 只能被该类自身所访问和修改D. 只能被同一个包中的类访问5. 假定int类型变量占用两个字节,其有定义int x [l0]={ 0,2,4 };,则数组x在内存中所占字节数是()。
A. 3B. 6C. 10D. 206. 下面程序的执行结果是()。
#include" iostream.h"void main( ) { int * p,r;p=new in;* p=20;r=sizeof(* p);cout <<r <<end1;delete p;}A. 程序错误B. 内存为20地址的大小.C. 20D. 47. 以下定义数组中错误的是()。
A. int a[10];B. int a[2][20];C. int a[20][ ];D. iht a[ ];8. 在公有派生情况下,有关派生类对象和基类对象的关系,下列叙述不正确的是()。
C语言的简答题包含解答共60道题

C语言的简答题包含解答共60道题1. 什么是C语言?◆C语言是一种通用的编程语言,由Dennis Ritchie于1972年开发。
它被广泛用于系统编程、应用程序开发和嵌入式系统等领域。
2. 什么是C语言的注释?◆在C语言中,注释用于添加对代码的解释和说明。
有两种类型的注释:单行注释(//)和多行注释(/* */)。
3. 什么是变量?如何声明变量?◆变量是用于存储数据的标识符。
在C语言中,变量的声明包括变量类型和名称,例如:`int myVariable;`。
4. 什么是数据类型?举例说明几种C语言的数据类型。
◆数据类型定义了变量可以存储的数据类型。
一些C语言的数据类型包括int、float、char、double等。
5. 什么是C语言的关键字?◆关键字是C语言中具有特殊含义的保留字,不能用作变量名。
例如,`if`、`while`、`for`等是关键字。
6. 什么是运算符?举例说明一些C语言的运算符。
◆运算符用于执行各种数学和逻辑操作。
例如,+、-、*、/是算术运算符,==、!=、>、<是比较运算符。
7. 什么是条件语句?举例说明一个C语言的条件语句。
◆条件语句用于根据条件执行不同的代码块。
例如,`if`语句用于在条件满足时执行特定的代码块。
8. 什么是循环语句?举例说明一个C语言的循环语句。
◆循环语句用于多次执行相同的代码块。
例如,`for`循环用于按照特定条件重复执行代码块。
9. 什么是函数?如何声明和定义一个函数?◆函数是可重复使用的代码块,用于执行特定任务。
函数的声明包括函数返回类型、名称和参数列表,例如:`int add(int a, int b);`。
10. 什么是指针?如何声明和使用指针?◆指针是用于存储变量地址的变量。
指针的声明包括指针类型和名称,例如:`int *ptr;`。
要使用指针,可以使用`&`运算符获取变量的地址,使用`*`运算符访问指针指向的值。
11. 什么是C语言中的数组?◆数组是一种用于存储相同数据类型的元素集合的数据结构。
常用的16个cc++面试题

常⽤的16个cc++⾯试题1. C中static有什么作⽤ (1)隐藏。
当我们同时编译多个⽂件时,所有未加static前缀的全局变量和函数都具有全局可见性,故使⽤static在不同的⽂件中定义同名函数和同名变量,⽽不必担⼼命名冲突。
(2)static的第⼆个作⽤是保持变量内容的持久。
存储在静态数据区的变量会在程序刚开始运⾏时就完成初始化,也是唯⼀的⼀次初始化。
共有两种变量存储在静态存储区:全局变量和static变量。
(3)static的第三个作⽤是默认初始化为0.其实全局变量也具备这⼀属性,因为全局变量也存储在静态数据区。
在静态数据区,内存中所有的字节默认值都是0×00,某些时候这⼀特点可以减少程序员的⼯作量。
2.C++中const有什么⽤? 不要⼀听到const就说是常量,这样给考官⼀种在和⼀个外⾏交谈的感觉。
应该说const修饰的内容不可改变就⾏了,定义常量只是⼀种使⽤⽅式⽽已,还有const数据成员,const参数, const返回值, const成员函数等,被const修饰的东西都受到强制保护,可以预防意外的变动,能提⾼程序的健壮性。
3. C与C++各⾃是如何定义常量的?有什么不同? C中是使⽤宏#define定义, C++使⽤更好的const来定义。
区别: 1)const是有数据类型的常量,⽽宏常量没有,编译器可以对前者进⾏静态类型安全检查,对后者仅是字符替换,没有类型安全检查,⽽且在字符替换时可能会产⽣意料不到的错误(边际效应)。
2)有些编译器可以对const常量进⾏调试,不能对宏调试。
4. 既然C++中有更好的const为什么还要使⽤宏? const⽆法代替宏作为卫哨来防⽌⽂件的重复包含。
5. C++中引⽤和指针的区别? 引⽤是对象的别名,操作引⽤就是操作这个对象,必须在创建的同时有效得初始化(引⽤⼀个有效的对象,不可为NULL),初始化完毕就再也不可改变,引⽤具有指针的效率,⼜具有变量使⽤的⽅便性和直观性,在语⾔层⾯上引⽤和对象的⽤法⼀样,在⼆进制层⾯上引⽤⼀般都是通过指针来实现的,只是编译器帮我们完成了转换。
全国计算机二级C语言知识点

数组下标的下限是0。
全国计算机二级C语言公共基础知识一、数据结构与算法1、完全二叉树是属于非线性结构,但其最佳存储方式是顺序存储方式2、顺序存储结构中可能根节点不唯一,故可能不是线性结构3、算法的有穷性是指,算法中的操作步骤为有限个,且每个步骤都能在有限时间内完成4、法复杂度包括算法的时间复杂度和算法的空间复杂度。
算法设计必须考虑执行算法所需要的资源,即时间与空间复杂度5、算法的优劣取决于算法复杂度,与程序的环境无关,当算法被编程实现之后,程序的运行受到计算机系统运行环境的限制6、循环队列中,由于指针超过队列地址最大值时会移动到队列最小地址处,所以队头指针可以大于也可以小于队尾指针7、链式存储结构中每个结点都由数据域与指针域两部分组成,增加了存储空间8、循环队列是队列的一种顺序存储结构,用队尾指针rear指向队列中的队尾元素,用排头指针front指向排头元素的前一个位置9、设循环队列为Q(1: m),其初始状态为front=rear=m。
经过一系列入队与退队运算后,front= X,rear= Y。
现要在该循环队列中寻找最大值的元素,最坏情况下需要比较的次数为(1)若X>Y,则次数为m-(Y-X)-1(2)若X<Y,则次数为Y-X-110、循环队列中的元素个数与队头指针和队尾指针的变化而变化11、队列的修改是依先进先出的原则进行的12、设计算法时不仅要考虑对数据对象的运算和操作,还要考虑算法的控制结构13、顺序表具有以下两个基本特征:(1)线性表中所有元素所占的存储空间是连续的;(2)线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。
(3)在顺序表中,每个元素占有相同的存储单元14、设栈的顺序存储空间为S(0:49),栈底指针bottom=X,栈顶指针top=Y(指向栈顶元素)。
则栈中的元素个数为X-Y+115、设栈的顺序存储空间为S(1: m),初始状态为top=m+1(X)。
面向对象技术的多态性研究

(.o e eo nom t n T c .& S i.N ni oet nv, aj g i gu 2 0 3 , 1 l g fIf ai e h Cl r o c , aj g F rsy U i. ni ,J n s 10 7 n n r N n a
收稿 日期 : 0 6 0 一 l 修 订 日期 : 0 6 0 — 4 20 — 9 I ; 2 0 — 9 1
C C #中体 现静 态 多态 的是 函数 重载 、运算
符 重载 和模 板 ,这些 机制 的共 同特点 是在 编译 阶 段 由编译器 确 定调用 函数 的入 口地 址 在何 处 。与 面 向过程 的 C语 言 中 函数 调用 相 比 , 层 实现 原 底
p o r mmi a u g . rga ng lng a e Ke r y wo ds: l mo p s ;t tcbi d n d na c b n i g; it a u to a sr c l s poy r him sa i n i g; y mi i d n v ru lf ncin; b ta tca s
0 引 言
封装性 、继 承性 和多态性 是面 向对 象技术 的
多态性 改善 了这 种程序设 计 方式 。 所谓 多 态性 , 广 义 上是 指程 序 可 以处 理 多种 类 型对 象 的能力 , 狭
义上 是指 不 同的对象 收到相 同 的消息 ,产 生不 同 的操 作 。 在 面 向对 象编程 语言 中 ,消息传 递是 通过 调 用类 成员 函数 来实现 的 。不 同的操 作 ( 为 ) 指 行 是 执 行不 同类 的成员 函数体 ,在什 么 阶段确 定 函数 调用 和某段 函数体 目标代码 联 系起来 是 函数 的绑
C++考试复习题及答案

一、选择题(1)下面关于类和对象的描述中,错误的是A)类就是C语言中的结构体类型,对象就是C语言中的结构体变量B)类和对象之间的关系是抽象和具体的关系C)对象是类的实例,一个对象必须属于一个已知的类D)类是具有共同行为的若干对象的统一描述体(2)以下各选项组中,均是C++语言关键字的组是A) public operator this B)shod string staticC)it while >= D)private cout printf(3)在C++语言中,数据封装要解决的问题是A)数据的规化B)便于数据转换C)避免数据丢失D)防止不同模块之间数据的非法访问(4)以下程序中,错误的行是①#include<iostream. h>②class A③{④ public:⑤ int n=2:⑥ A( int val){cout<<val<<endl;}⑦~A(){};⑧};⑨void main()⑩{⑩ A a(0);⑩}A)⑤ B)⑥ C)⑦ D)⑩(5)对类的构造函数和析构函数描述正确的是A)构造函数可以重载,析构函数不能重载B)构造函数不能重载,析构函数可以重载C)构造函数可以重载,析构函数也可以重载D)构造函数不能重载,析构函数也不能重载(6)下面程序的运行结果为#include(iostream. h>class A{int num;public:A(int i){num=i;}A(A &a){num=a. num++;}void print(){cout<<num;}};void main(){A a(1),b(a);a. print();b.print();A)11 B)12 C)21 D)22(7)下面对静态数据成员的描述中,正确的是A)静态数据成员是类的所有对象共享的数据B)类的每个对象都有自己的静态数据成员C)类的不同对象有不同的静态数据成员值D)静态数据成员不能通过类的对象调用(8)如果类A被说明成类B的友元,则A)类A的成员即类B的成员B)类B的成员即类A的成员C)类A的成员函数不得访问类B的成员D)类B不一定是类A的友元(9)可以用p.a的形式访问派生类对象P的基类成员a,其中a是A)私有继承的公有成员B)公有继承的私有成员C)公有继承的保护成员 D)公有继承的公有成员(10)建立派生类对象时,3种构造函数分别是a(基类的构造函数)、b(成员对象的构造函数)、c(派生类的构造函数)这3种构造函数的调用顺序为A)abc B)acb C)cab D)cba(11)下面关于虚函数的描述,错误的是A)在成员函数声明的前面加上virtual修饰,就可把该函数声明为虚函数B)基类中说明了虚函数后,派生类中对应的函数也必须说明为虚函数C)虚函数可以是另一个类的友元函数,但不能是静态成员函数D)基类中说明的纯虚函数在其任何派生类中都必须实现(12)下面关于模板的描述,错误的是A)函数模板和类模板的参数可以是任意的数据类型B)类模板不能直接使用,必须先实例化为相应的模板类.然后定义了模板类的对象后才能使用C)函数模板不能直接使用,需要实例化为模板函数后才能使用D)类模板的成员函数都是模板函数(13)语句ofstream f(”SALARY. DAT",ios::app iios::binary);的功能是建立流对象f,试图打开文件SALARY. D AT并与之连接,并且A)若文件存在,将文件写指针定位于文件尾;若文件不存在,建立一个新文件B)若文件存在,将其置为空文件;若文件不存在,打开失败C)若文件存在,将文件写指针定位于文件首;若文件不存在,建立一个新文件D)若文件存在,打开失败;若文件不存在,建立一个新文件(14)下面程序的运行结果是#include<iostream. h>void main(){int num=1;int &ref=num;ref=ref+2;cout<<num;num=num+3;cout<<ref<<endl;}A)13 B)16 C)36 D)33(15)假定AB为一个类,则该类的拷贝构造函数的声明语句为。
c语言中多态的定义及实现方式

c语言中多态的定义及实现方式C语言是一种面向过程的编程语言,不支持面向对象编程的特性,如多态、继承和封装等。
但是,我们可以通过一些技巧来实现类似于面向对象编程中的多态性。
在本文中,我们将介绍C语言中多态的定义、实现方式以及举出一些例子。
1.多态的定义多态是面向对象编程中的一个重要概念。
它指的是不同对象对同一消息作出不同响应的能力。
在C语言中,我们可以通过函数指针、结构体和联合体等技术来实现多态性。
下面是多态的定义:多态是指在不同的对象上调用同一方法,而这些对象会根据所属类的不同产生不同的行为。
换句话说,多态是指一个接口,多种实现。
1.多态的实现方式在C语言中,我们可以通过以下方式来实现多态性:2.1 函数指针函数指针是指向函数的指针变量。
我们可以将不同的函数指针赋值给同一个函数指针变量,从而实现多态性。
例如:#include <stdio.h>void add(int a,int b){printf("%d + %d = %d\n", a, b, a + b);}void sub(int a,int b){printf("%d - %d = %d\n", a, b, a - b);}int main(){void(*p)(int,int);int a =10, b =5;p = add;p(a, b);p = sub;p(a, b);return0;}在上面的例子中,我们定义了两个函数add和sub,它们实现了两种不同的行为。
我们定义了一个函数指针p,它可以指向这两个函数。
在不同的情况下,我们将p 指向不同的函数,从而实现了多态性。
2.2 结构体结构体是一种自定义的数据类型,它可以包含多个不同类型的成员。
我们可以通过结构体来实现多态性。
例如:#include <stdio.h>typedef struct Animal{void(*speak)();} Animal;typedef struct Cat{Animal base;} Cat;typedef struct Dog{Animal base;} Dog;void cat_speak(){printf("Meow!\n");}void dog_speak(){printf("Woof!\n");}int main(){Cat cat;Dog dog;cat.base.speak = cat_speak;dog.base.speak = dog_speak;cat.base.speak();dog.base.speak();return0;}在上面的例子中,我们定义了一个Animal结构体和两个派生结构体Cat和Dog。
1在C中多态性体现在哪几方面?

1 在C++ 中多态性体现在哪几方面?答案:在C++中,多态性体现在两个方面:编译多态性——对同一消息的不同操作是在程序编译时就确定了,即静态多态性。
运行多态性——对同一消息的不同操作是在程序运行时根据不同的运行状况才确定,即动态多态性。
2 函数重载与虚函数有哪些相同点与不同点?答案:函数重载与虚函数之间的相同点是多个函数版本具有相同的函数名,即表现出对同一消息的不同操作。
而二者之间的不同点表现在:⑴函数重载的不同函数版本既允许存在于同一类中,也允许基类的成员函数在派生类中重载。
存在于同一类中的不同重载函数版本的参数(类型、个数、顺序)必须有所不同。
如果存在于基类和派生类中的成员函数的原型完全一致,则派生类的成员函数将覆盖基类的同名函数。
⑵虚函数是用来表现基类和公有派生类的相同原型成员函数之间的关联关系的实现机制,因此这种同原型成员函数必须分属于基类和派生类,并且首先在基类中用关键字virtual 声明虚函数;一个虚函数一旦被定义,就可以在该基类的一个或多个直接或间接派生类中被重新定义;虚函数重新定义时,其函数原型,即包括返回类型、函数名、参数的类型、个数和顺序,都必须与基类中的原型完全一致。
3 虚函数是如何实现面向对象系统的多态性的,它会带来什么益处?答案:在一个具有公有派生关系的类层次结构中,只要在基类中将某个接口函数声明为虚函数,并在该基类的直接和间接公有派生类中重新定义该虚函数的不同新版本,就可以实现在程序运行期间,使用一个基类指针动态地指向基类和从该基类直接或间接派生的任何类的对象,并通过该指针调用虚函数在不同类中定义的不同版本,即动态多态性。
显然,虚函数为面向对象系统提供了一种更为灵活的多态性,这种多态能力对于期望在基类中为从该基类派生的所有类定义统一的操作接口的设计尤为重要。
4 下面有两段程序,判断它们是否正确,若有错误,给予纠正。
①class base{// …public:virtual void show();};class derive : public base{// …public:void show();};main(){base obj1, obj2, *ptr1;derive obj3, obj4, *ptr2;ptr1 = &obj1;ptr1->show();ptr1 = &obj3;ptr1->show();ptr2 = &obj4;ptr2->show();ptr2 = &obj2;ptr2->show();// …}②class fruit{// …public:virtual void show() = 0;// …};class apple : public fruit{// …public:void show();// …};main(){fruit fru, *ptr;apple app;ptr = &app;ptr->show();ptr = &fru;ptr->show();// …}答案:①该程序的main()中出现了使用派生类指针指向基类对象,并通过该指针调用基类虚函数的错误语句(ptr2 = &obj2; ptr2->show();),因此,应该将main()修改为:main(){base obj1, obj2, *ptr1;derive obj3, obj4, *ptr2;ptr1 = &obj1;ptr1->show();ptr1 = &obj3;ptr1->show();ptr2 = &obj4;或ptr1 = &obj4;ptr2->show(); 或ptr1->show();// …}②该程序的main()中出现了为抽象类fruit创建对象,并通过基类指针调用纯虚函数的错误语句(fruit fru, ptr = &fru; ptr->show();),因此,应该将main()修改为:main(){fruit *ptr;apple app;ptr = &app;ptr->show();// …}5 判断下列各段程序是否可以通过编译?为什么?⑴#include <iomanip.h>class X{public:X() { }virtual void foo();};class Y : public X{public:Y() { }void foo() { cout << “Y’s foo invoked” << endl; }};int main() { return 0; }答案:由于基类中的虚函数没有定义实现代码,所以不能通过编译。
c语言联合体类型的妙用

联合体(union)是C 语言中的一种数据类型,它可以存储不同的数据类型,但一次只能存储其中一种数据。
由于这个特性,联合体在C 语言中有着许多有趣和实用的用途。
以下是其中的一些:
1.节省内存: 如果你有一些不同但大小相近的数据类型,你可以使用联合体来共享内存。
这样,你就可以在一个内存位置存储多种数据类型,而不是为每种数据类型分配单独的内存。
2.多态性: 联合体可以模拟C 语言中的多态性。
例如,你可以创建一个联合体,其第一个成员是函数指针,第二个成员是你想要的数据类型。
这样,你就可以根据需要选择调用哪个函数。
3.转换数据类型: 在某些情况下,你可能需要将一个数据类型转换为另一个数据类型。
使用联合体,你可以在相同的内存位置存储这两种类型,从而方便地进行转换。
4.实现数据压缩: 联合体可以用于实现数据的无损压缩。
通过精心选择要存储的数据类型,你可以有效地利用内存空间。
5.数据验证和校验: 通过将可能的数据和校验和/标志放在一个联合体中,你可以在一次读取中同时获取数据和其校验信息。
6.实现低级编程技巧: 在一些低级编程任务中,如硬件编程或操作系统开发,联合体可以用来直接操作内存。
7.简化代码: 在某些情况下,使用联合体可以使代码更简洁。
例如,如果你有一些大小相同但类型不同的数组,你可以使用联合体来创建一个单一的数组,每个元素都是一个联合体。
在使用联合体时,需要注意的是它的一个主要限制:由于它一次只能存储一种数据类型,因此必须小心处理数据的生命周期和访问方式,以避免未定义的行为。
《C++面向对象程序设计》 谭浩强 第六章

C++
先声明基类point类,并调试之; 再声明派生类circle类,调试之; 最后声明cylinder类,调试之。
6- 5
① 先声明基类point
#include <iostream.h> class point //声明类point {public: point (float x=0, float y=0 ); //有默认值的构造函数 void setPoint (float, float); //设置点坐标 float getX ( ) const { return x; } // 读x 值 float getY ( ) const { return y; } // 读y 值 friend ostream & operator << ( ostream &, const point &); protected: float x,y; }; // 下面定义 point类的成员函数 point :: point (float a, float b) // point的构造函数 { x = a; y = b; } void point :: setPoint (float a, float b) { x =a; y = b; } ostream &operator << (ostream &output, const point &p) { // 重载运算符<< output<<“[x=“<<p.x<<“, y=“<<p.y<<“]”<<endl; return output; }
6Hale Waihona Puke 7③ 最后声明cylinder类
二级C语言分类模拟题516_真题(含答案与解析)-交互

二级C语言分类模拟题516(总分51, 做题时间90分钟)选择题1.下列程序的输出结果是______。
#include<stdio.h>main(){int a[2][3]={{1, 2, 3}, {4, 5, 6}}, (*p)[3], i; p=a;for(i=0; i<3; i++){ if(i<2)p[1][i]=p[1][i]-1;elsep[1][i]=1;}printf("%d\n", a[0][1]+a[1][1]+a[1][2]);}SSS_SINGLE_SELA 8B 7C 12D 9分值: 2.5答案:B[解析] 本题考查for循环及if…else语句嵌套,第1次执行for循环,p[1][0]=p[1][0]=p[1][0]-1=3;第2次执行for循环,p[1][1]=p[1][1]-1=4;第3次执行for循环,p[1][2]=1,最后输出的是a[0][1]+a[1][1]+a[1][2]=2+4+1=7。
2.以下叙述中正确的是______。
SSS_SINGLE_SELA 使用break语句可以使流程跳出switch语句体B break语句不能用于提前结束for语句的本层循环C continue语句使得整个循环终止D 在for语句中,continue与break的效果是一样的,可以互换分值: 2答案:A[解析] break跳出switch语句或循环语句,contiune结束本次循环,继续进行剩余的循环。
所以答案选择A。
3.有以下程序:#include<stdio.h>void fun(int*s, int n1, int n2){ int i, j, t;i=n1; j=n2;while (i<j){ t=*(s+i); *(s+i)=*(s+j); *(s+j)=t; i++; j--; }}main(){ int a[10]={1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, i, *p=a;fun(p, 0, 3); fun(p, 4, 9); fun(p, 0, 9);for(i=0; i<10; i++) printf("%d", *(a+i));程序的输出结果是SSS_SINGLE_SELA 0987654321B 4321098765C 5678901234D 0987651234分值: 1答案:C4.以下叙述中正确的是______。
全国计算机等级考试二级c语言公共基础知识总结

全国计算机等级考试二级c语言公共基础知识总结第一章数据结构与算法1.1 算法算法:是指解题方案的准确而完整的描述。
算法不等于程序,也不等计算机方法,程序的编制不可能优于算法的设计。
算法的基本特征:是一组严谨地定义运算顺序的规则,每一个规则都是有效的,是明确的,此顺序将在有限的次数下终止。
特征包括:(1)可行性;(2)确定性,算法中每一步骤都必须有明确定义,不充许有模棱两可的解释,不允许有多义性;(3)有穷性,算法必须能在有限的时间内做完,即能在执行有限个步骤后终止,包括合理的执行时间的含义;(4)拥有足够的情报。
算法的基本要素:一是对数据对象的运算和操作;二是算法的控制结构。
指令系统:一个计算机系统能执行的所有指令的集合。
基本运算包括:算术运算、逻辑运算、关系运算、数据传输。
算法的控制结构:顺序结构、选择结构、循环结构。
算法基本设计方法:列举法、归纳法、递推、递归、减斗递推技术、回溯法。
算法复杂度:算法时间复杂度和算法空间复杂度。
算法时间复杂度是指执行算法所需要的计算工作量。
算法空间复杂度是指执行这个算法所需要的内存空间。
1.2 数据结构的基本基本概念数据结构研究的三个方面:(1)数据集合中各数据元素之间所固有的逻辑关系,即数据的逻辑结构;(2)在对数据进行处理时,各数据元素在计算机中的存储关系,即数据的存储结构;(3)对各种数据结构进行的运算。
数据结构是指相互有关联的数据元素的集合。
数据的逻辑结构包含:(1)表示数据元素的信息;(2)表示各数据元素之间的前后件关系。
数据的存储结构有顺序、链接、索引等。
线性结构条件:(1)有且只有一个根结点;(2)每一个结点最多有一个前件,也最多有一个后件。
非线性结构:不满足线性结构条件的数据结构。
1.3 线性表及其顺序存储结构线性表是由一组数据元素构成,数据元素的位置只取决于自己的序号,元素之间的相对位置是线性的。
在复杂线性表中,由若干项数据元素组成的数据元素称为记录,而由多个记录构成的线性表又称为文件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第13卷第1期广州航海高等专科学校学报Vol .13 No .12005年6月JOURNAL OF G UANGZ HOU MAR I TI M E COLLEGEJun .2005文章编号:1009-8526(2005)01-0055-03C++语言中多态性的分析江勇驰(广州航海高等专科学校交通运输管理系,广东广州510725)摘 要:通过分析C++语言多态性的各种形式、特征及其在程序设计中的应用,说明多态性是对相似问题求解的有效方法.关键词:C++;多态性;面向对象;虚函数中图分类号:TP311.1 文献标识码:A 收稿日期:2005-03-10 作者简介:江勇驰(1972-),男,助理馆员,主要从事自动化与计算机的实验教学和管理. C++语言具有数据封装、继承及多态性三大特征[1],多态性同时考虑了类的数据封装与继承关系的设计,是C++最重要的特征.在程序中多态性是指同一符号或名字在不同情况下代表不同但相似的功能[2],是对相似问题的一种求解方法.本文主要分析C++语言的多态性支持在程序设计中的应用.1 实现形式及其应用在C++面向对象程序设计中,实现多态性有两种基本形式:编译时多态性和运行时多态性[3].编译时多态性是指在程序编译阶段即可确定下来的多态性,包括强制多态和重载多态两种形式.运行时多态性是指必须等到程序动态运行时才可确定的多态性,主要通过继承结合动态绑定获得,分别体现在包含多态与类型参数化多态两方面.1.1 强制多态当表达式中存在不同类型的操作数时,为对此表达式进行求值,编译程序需要对其中的部分操作数强制进行类型转换,以保证运算符两边的操作数类型一致,但体现出来的却是完成了不同类型操作数间的运算,这就是C++中的强制多态性.C++中,“1+2”表示整数的加法,“1.0+2.0”表示浮点数的相加,而“1.0+2”需要作类型转换,实际进行浮点数加法,但却表示整数与浮点数的相加.这两种运算的内部实现是不同的,而且效率相差很大,不便用不同的符号表达.同一个运算符“+”可以同时具有不同但相似的运算含义,体现的就是强制多态性[3].C++中规定了基本数据类型之间的转换规则:如果运算符两边的操作数类型运算不一致,则总是将取值范围的最大值较小的类型转换为取值范围的最大值较大的类型,取值范围从大到小分别是:l ong double,double,fl oat,unsigned l ong,l ong,unsigned 和int .正是由于这种多态性,才简化了程序设计,可以按相同的逻辑处理各种数据的加法.不过C ++中,强制多态性是有限的,不能用这一方法去解决许多类似问题.重载多态提供了另外一种途径.1.2 重载多态重载多态主要通过使用重载机制获得,包括函数重载和运算符重载两大类.运算符重载允许重新定义C ++语言已有的运算符,以一种更加自然的方式使用自己定义的类类型.例如,加法运算符“+”表示整数或浮点数的加法,如果用户定义了一个复数类Comp lex,在类定义中对加法运算符“+”进行了重载,定义实现复数相加的操作Co mp lex operat or +(const Comp lex&oth 2er ){...},那么使用复数类声明两个对象Comp lex obj1,obj2;后,就可以直接使用obj1+obj2表示对复数求和的操作,使得程序语言更接近习惯用法.C++语言中颇具典型的例子就是插入符“<<”和提取符“>>”的重载.在C 语言中,利用库函数p rintf ()输出或scanf ()输入时需要用参数指明输出或输入的数据类型方可正确输出或输入,而在C++56 广州航海高等专科学校学报第13卷 中,由于在ostrea m类和istrea m类中大量重载了“< <”和“>>”,C++的内部数据类型编译器能自动判别并正确输入输出,使用起来变得非常方便.如: cout<<"x="<<x<<"y="<<y<<endl;无论x和y是什么类型,都可按上面的语句输出,C++会自动调用合适的运算符满足要求.当然,用户只需定义重载“<<”和“>>”的操作,同样可以象上例那样方便地输入输出自定义的数据类型.函数重载允许程序员用相同的名字定义两个或更多的C++函数,使得语义相似的函数可以用同样的标识符来命名,它是获得多态性的常用途径.例如对构造函数的重载,可使程序对类对象有多种不同的途径进行初始化.C语言不支持函数重载,每一个函数必须具有唯一的名字,不利于处理相似性问题.运用C++提供的函数重载机制,对解决相似问题的函数可使用相同的名字,即进行重载:int abs(int x){...}l ong abs(l ong x){...}double abs(double x){...}函数重载时使用的是静态绑定,编译程序在编译时根据实际参数的个数与相应位置的类型选择调用相关版本的重载函数.这种多态性尤其便利于大型的程序设计.但函数重载适宜在函数实现的语义非常相近时使用,同时应避免产生无法消解的二义性问题.1.3 包含多态在C++中,包含多态性是指相同的函数名出现在不同的类中,而且这样的函数必须是虚函数并以继承为基础的.使用包含多态性必须先设计一个类层次,在类中使用虚函数(这个类叫多态类),结合动态绑定实现[3].根据赋值兼容规则,公有派生类兼容基类,指向基类对象的指针变量可以指向其公有派生类的对象,这就意味着一个公共的消息集既可以被送到基类对象,也可以被送到其公有派生类的对象,那么就可以用一组相同的方法和逻辑来使用这个类层次中不同类中的同名虚函数,而虚函数中定义的具体操作可以是不同的,这是这种多态性的实质.以下是实例:#include<i ostrea m.h>classMe mber{ //成员基类public:virtual v oid showme(){cout<<"I a m a Me m2 ber.\n";return;}};class Teacher:public Me mber{ //由成员类派生出的教师类public: virtual void showme(){cout<<"I a m a Teacher.\n";return;}};class Student:public Me mber{ //由成员类派生出的学生类public: virtual void showme(){cout<<"I a m a Student.\n";return;}};void main(){Me mber me m;Teacher tch;Student std;Me mber3who;who=&me m;who->showme();who=&tch;who->showme();who=&std;who->showme()return;};运行结果为:I a m a Me mber.I a m a Teacher.I a m a Student.基类指针who分别指向基类对象和两个不同的派生类对象,运行期间将根据所指对象类型来动态绑定,决定调用哪一个类中定义的showme()虚函数版本.利用虚函数,可在基类和派生类中使用相同的函数名定义函数的不同实现,从而实现“一个接口,多种方式”.当基类中无法给出虚函数的合理定义或软件设计需要构造更高层次的抽象时,可以利用C++提供的纯虚函数来设计包含多态性,含有纯虚函数的类叫抽象类.例如,设计一个多态数据结构,要能存放三角形、矩形、圆等多种图形数据,并提供计算相应图形面积的功能.可以抽取有关图形的共性设计一个基类F I G URE,用纯虚函数描述共同行为:计算面积,再派生出各种图形类给出具体实现方法,用堆栈存放指向图形对象的指针.基类层次如图1所示.图1 基类层次图class F I G URE{...virtual double get_area()= 0;...};//基类中用纯虚函数表示求图形面积 第1期江勇驰:C++语言中多态性的分析57class T R I A NG LE:public F I G URE{ ...virtual double get_area(){...}...};//给出计算三角形面积的定义class RECT ANG LE:public F I G URE{ ...virtual double get_area(){...}...};//给出计算矩形面积的定义class C I RCLE:public F I G URE{ ...virtual double get_area(){...}...};//给出计算圆面积的定义class ST ACK{...struct NODE{F I G URE3ele m;NODE3 link;};...};//堆栈的数据结构由于在堆栈数据中只定义了指向基类的指针,可以指向各种不同类型的图形对象,因此实现了构造多态数据的结构.多态数据结构中的元素类型必须从共同的基类派生出来,它们之间是有联系的. 1.4 类型参数多态C++是一种强类型的语言,参与运算的所有变量的类型在编译时便已确定下来,不同类型的变量所能参加的运算由其所属的类型规定,不能交叉使用.对此,编译程序将进行严格的类型检查以保证编写的程序语法、语义的正确性.但这也带来了一些副作用,例如编制一个将两个数进行交换的程序,尽管任何类型的数进行交换的处理逻辑是一样的,但由于参数的类型不同,只好编制很多相似的函数,增加了程序的重复代码.强类型程序设计语言通常采用类属机制解决这个问题,C++提供类型参数的多态性即模板机制实现类属,这种方法可以直接将数据类型作为类的参数或者函数的参数使用.模板分为类模板和函数模板,是一种抽象的描述,不能直接使用,必须先通过实例化创建某种类型的类或函数,方可使用.下面仅就类模板举例说明://一个简单链表的类模板定义te mp late<class T> //T为类型参数class L I ST{p rivate:T3vect or;int size;public:L I ST(int length){vect or=ne w T[length];size=length;return;}~L I ST(){delete vect or;return;}};它定义了一个具有T类型数据的链表类.T是一个抽象的数据类型,既可代表整型、浮点型,也可代表图形元素、记录类型等等.使用这个类必须实例化:如L I ST<int>;L I ST<fl oat>;需要声明对象时: L I ST<int>obj(100);这样便定义了长度为100数据类型为整型的链表obj.2 结束语多态性是解决相似性问题的有效工具,它简化了繁杂的程序设计逻辑,增强了程序的可读性与可维护性,而且它表明C++语言具有表示和处理更高抽象的能力,使得程序设计可以在更高的层次上进行,为程序的正确性证明和验证提供了方便.在C++语言程序设计中有效地利用多态性,可以提高程序的可扩充性、便捷性以及代码的再用率.参考文献:[1] 蔡明志.Borland C++4.0使用与编程指南[M].北京:清华大学出版社,1994.[2] 王斌君,葛 玮,王靖亚.C++语言与软件的多态性[J].计算机工程与应用,1998,34(10):46-49.[3] 李师贤,李文军,周晓聪.面向对象程序设计基础[M].北京:高等教育出版社,1998.ANALY S I S O N POLYMO RPH I S M O F C++J I AN G Yong2chi(Depart m ent of Trans portati on Manage ment,Guangzhou Mariti m e College,Guangzhou510725,China)Abstract:By analyzing the app licati on as well as the f or m and characteristic of poly mor phis m of C++,this paper holds that poly mor phis m is an efficient method in achieving the s oluti on f or the si m ilar p r oblem s.Key words:C++;poly mor phis m;object2oriented;virtual functi on【责任编辑 王世杰】。