


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、16. 关联、聚合(Aggregation)以及组合(Composition) 的区别?关联是表示两个类的一般性联系,比如学生”和 老师”就是一种关联关系;聚合表示has-a的关系,是一种相对松散的关系,聚合类不需要对被聚合类负责,如下图所示,用空的菱形表示聚合关系:从实现的角度讲,聚合可以表示为:class A . class B A* a;.组合表示contains-a的关系,关联性强于聚合:组合类与被组合类有相同的生命周期,组合类要对被组合类负责,采用实心的菱形表示组合关系:实现的形式是:class A. class B A a; .17. 面向对象的三个基本特征,并简单叙述之?1. 封
2、装:将客观事物抽象成类,每个类对自身的数据和方法实行protecti on( private,protected,public)2. 继承:广义的继承有三种实现形式:实现继承(指使用基类的属性和方法而无需额外编码的能力)、可视继承(子窗体使用父窗体的外观和实现代码)、接口继承(仅使用属性和方法,实 现滞后到子类实现)。前两种(类继承)和后一种(对象组合=> 接口继承以及纯虚函数)构成了功能复用的两种方式。3. 多态:系统能够在运行时,能够根据其类型确定调用哪个重载的成员函数的能力,称为多态性。(见:C+中类的多态与虚函数的使用)18. 重载(overload) 和重写(overried,
3、有的书也叫做覆盖”的区别?重载:是指允许存在多个 同名函数,而这些函数的 参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。重写:是指子类重新定义父类虚函数的方法。重载:编译器根据函数不同的参数表,对同名函数的名称做修饰,然后这些同名函数就成了不同的函数(至少对于编译器来说是这样的)。如,有两个同名函数:fun ctionfunc(p:integer):integer;和口 function func(p:string):integer;。那么编译器做过修饰后的函数名称可能是这样的:int_func 、str_func 。对于这两个函数的调用,在编译器间就已经确 定了,是静态的
4、。也就是说,它们的地址在编译期就绑定了(早绑定),重载和多态无关! 重写:和多态真正相关。 当子类重新定义了父类的虚函数后, 父类指针根据赋给它的不同的子类 指针,动态的调用属于子类的该函数,函数调用在编译期间是无法确定 (调用的子类的虚函数 的地址无法给岀)。 函数地址是在运行期绑定的(晚绑定)。20. Ado 与A的相同与不同?除了能够让应用程序处理存储于DBMS中的数据这一基本相似点外,两者没有太多共同之处。但是Ado使用OLE DB 接口并基于微软的 COM 技术,而ADO.NET 拥有自己的 ADO.NET 接口并且基于微软的.NET 体系架构。众所周知.NET体系不同于 COM 体
5、系,ADO.NET 接口也 就完全不同于ADO和OLE DB 接口,这也就是说 ADO.NET 和ADO是两种数据访问方式。ADO.net 提供对XML的支持。21. New delete 与 malloc free 的联系与区别 ?答案:都是在堆(heap)上进行动态的内存操作。用malloc函数需要指定内存分配的字节数并且不能初始化对象,new 会自动调用对象的构造函数。delete 会调用对象的destructor ,而free 不会调用对象的 destructor.(可以看看:显式调用构造函数和析构函数)23. 有哪几种情况只能用intializationlist而不能用assignm
6、ent?答案:当类中含有 con st、refere nee成员变量;基类的构造函数都需要初始化表。24. C+ 是不是类型安全的?答案:不是。两个不同类型的指针之间可以强制转换(用reinterpret cast) 。C#是类型安全的。25. main函数执行以前,还会执行什么代码?答案:全局对象的构造函数执行,为malloc分配资源,等等。26. 描述内存分配方式以及它们的区别 ?1)从静态存储区域分配 。static 变量。,函数执行结束时存储单程序员自己负责在何时用free内存在程序编译时已分配好,整个运行期间都存在。如全局变量,2)在栈上创建。在执行函数时,函数内局部变量的存储单元都
7、可以在栈上创建 元自动被释放。栈内存分配运算内置于处理器的指令集。3) 从堆上分配,亦称动态内存分配。程序在运行的时候用 malloc 或new 申请任意多少的内存, 或delete 释放内存。4)代码区。28.当一个类A中没有生命任何成员变量与成员函数,这时sizeof(A)的值是多少,如果不是零,请解释一下编译器为什么没有让它为零。(Autodesk )答案:肯定不是零。举个反例,如果是零的话,声明一个class A10对象数组,而每一个对象占用的空间是零,这时就没办法区分A0,A1了。30.比较C+中的4种类型转换方式?dyn amic_cast:动态类型转换static_cast:静态
8、类型转换reinterpret_cast:重新解释类型转换con st_cast:常量类型转换理解:syn amic_cast: 般用在父类和子类指针或应用的互相转化;static_cast: 般是普通数据类型(如 int m=static_cast<int>(3.14);reinterpret_cast :很像c的一般类型转换操作const_cast 是把 cosnt 或 volatile 属性去掉31.分别写岀 BOOL,int,float.指针类型的变量 a与零”的比较语句答案:BOOL :if(!a ) orif (a)int :if(a= 0)float :constEX
9、PRESSIONEXP: 0.000001if(a <EXP && a >-EXP)poin ter :if(a !=NULL) or if (a=NULL)32.请说岀co nst与 #define相比,有何优点?1) con st 常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查而对后者只进行字符替换,没有类型安全检查2) 有些集成化的调试工具可对con st 常量调试,但是不能对宏常量调试。33.简述数组与指针的区别?数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。指针可以随时指向任意类型 的内存块。(1) 修改内容上的差别c
10、har a =“ hello ”;a0 = X'char *p =“ world ” 注意 p 指向常量字符串p0 = X'编译器不能发现该错误,运行时错误(2) 运算符sizeof可以计算数组容量(字节数)。sizeof(p),p为指针得到的是一个指针变量的字节数,而不是p所指的内存容量。注意当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。char a-'hello world" ;char*p - a;en dl; en dl;/12字节/4字节计算数组和指针的内存容量cout<< sizeof (a)voidFun c(char
11、 a100)<< en dl;/4字节而不是100字节34.类成员函数的重载、覆盖和隐藏区别? 答案:a. 成员函数被重载的特征:(1)(2)(3)(4)相同的范围(在同一个类中); 函数名字相同;参数不同;virtual关键字可有可无。b. 覆盖是指派生类函数覆盖基类函数,特征是:(1 )不同的范围(分别位于派生类与基类); (2 )函数名字相同;(3 )参数相同;c .重定义是派生类对父类虚函数的函数体重定义(1)不同的范围(分别位于派生类与基类);(2 )函数名字相同;(3 )参数相同;d.隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下:(1 )如果派生类的函数与基
12、类的函数同名,但是参数不同。此时,不论有无 基类的函数将被隐藏(注意别与重载混淆)。(2 )如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有 字。此时,基类的函数被隐藏(注意别与覆盖混淆)virtual 关键字,virtual 关键35. There are twoint variables: a and b, donother judgeme nt stateme nts, find out the biggest one of the two n umbers.t useifswitch ” orcout«sizeof(a)<<cout«s
13、izeof(p)<<(a + b ) + abs( a- b ) ) / 2Find out the average of the two n umbers (a&b + (aAb)>>1)36. 如何打印岀当前源文件的文件名以及源文件的当前行号?cout << FILE cout«_LINE_ ;_FILE_ 和_LINE_ 是系统预定义宏由编译器定义的37. main主函数执行完毕后,是否可能会再执行一段代码,给岀说明?答案:可以,可以用_onexit注册一个函数,它会在main 之后执行int fnl(void), fn2(void)
14、,fn3(void),fn4 (void);void mai n( void )String str("zhanglin");_on exit( fn1 );_on exit( fn2 );_on exit( fn3 );_on exit( fn4 );printf( "This is executed first.' n");int fn1()printf( "n ext.'n" );return 0;int fn2()printf( "executed ");return 0;int fn3()
15、printf( "is ");return 0;int fn4()printf( "This ");return 0;The _on exit fun cti on is passed the address of a fun cti on (func) to be called whe nthe program term in ates n ormally. Successive calls to _on exit create a registerof fun cti ons that are executed in LIFO (last-i n-f
16、irst-out) order. The fun cti on spassed to _on exit cannot take parameters.38. 如何判断一段程序是由C编译程序还是由 C+编译程序编译的?#ifdef _cpluspluscout<< "c+"#elsecout«"c"#en dif40.链表题:一个链表的结点结构struct Nodeint data ;Node *next ;;typedef struct Node Node ;(1)已知链表的头结点 head,写一个函数把这个链表逆序(In tel)
17、Node * ReverseList(Node *head) / 链表逆序if ( head = NULL |head-next = NULL )returnhead;Node*p1=head ;Node*p2=p1- >n ext ;Node*p3=p2->n ext ;p1- >n ext=NULL ;while(P3!= NULL )p2->n ext=p1 ;pl =p2 ;p2 =p3 ;p3 = p3->n ext ;p2->n ext= pl ;head = p2 ; retur nhead ;(2) 已知两个链表headl 和head2 各自
18、有序,请把它们合并成一个链表依然有序。Node * Merge(Node *head1 , Node *head2)if( headl= NULL)retur nhead2 ;if( head2= NULL)retur nheadl ;Node *head = NULL ;Node *p1= NULL;Node *p2= NULL;if ( head1->data < head2->data )head = headl ;pl = headl- >n ext;p2 = head2 ;elsehead = head2 ;p2 = head2->n ext ;pl =
19、 headl ;Node *pcurrent= head ;while ( pl != NULL && p2 != NULL) if ( p1->data <= p2->data )pcurre nt->n ext = pl ;pcurre nt = pl ;pl = p1- >n ext ;elsepcurre nt->n ext= p2 ;pcurre nt= p2 ;p2 = p2->n ext ;if( pl!= NULL )pcurre nt->n ext= pl ;if( p2!= NULL )pcurre nt-&g
20、t;n ext= p2 ;retur nhead ;这次要求(3) 已知两个链表headl 和head2 各自有序,请把它们合并成一个链表依然有序, 用递归方法进行。(Autodesk)答案:Node * MergeRecursive(Node *head1 , Node *head2) if ( headl = NULL )retur nhead2 ;if ( head2 = NULL)retur nheadl ;Node *head = NULL ;if ( head1->data < head2->data )head = headl ;head->n ext=
21、MergeRecursive(head1- >n ext,head2);elsehead = head2 ;head->n ext= MergeRecursive(head1,head2->n ext);return head ;43. 写一个在一个字符串(n)中寻找一个子串(m)第一个位置的函数KMP算法效率最好,时间复杂度是O(n+m)。Void get_ next(char T, int n ext)int len = strle n(T);int j = 0;n ext0 = next1 = 0;for(i nti = 1; i < len; i+)While(j > 0 && Ti != Tj)j = nextj;if(Ti = Tj)j+ ; n extj+1 = j;int KMP(char S,char T,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- ××超市财务预算制度
- ××超市指引牌制度
- 机械工程技能熟练度证明(7篇)
- 心中的老师形象写人作文(9篇)
- 2025年注册会计师考试《会计》财务报表分析模拟试题精讲与解析
- 2025年稀有稀土金属矿项目提案报告
- 2025年江西省事业单位招聘考试综合类专业能力测试试卷(工程类)真题汇编及解析
- 2025年抗贫血药项目规划申请报告模板
- 2025年保育员(一级)儿童教育管理学研究论文案例分析考试试卷
- 2025年德语TestDaF阅读真题试卷:德语心理学研究阅读
- IMC整合营销传播培训教材课件
- 2023年副主任医师(副高)-神经内科学(副高)历年考试真题试卷摘选答案
- 2022年天水市武山县社区工作者招聘考试试题
- 2022年出版专业资格考试中级中级出版专业基础知识考试题
- 疼痛治疗(外科学-九章)
- 压力容器的发展趋势
- 工程质量投诉受理处理台账
- 2023年版一级建造师-水利工程实务电子教材
- GB/T 38537-2020纤维增强树脂基复合材料超声检测方法C扫描法
- GB/T 29490-2013企业知识产权管理规范
- GB/T 19787-2005包装材料聚烯烃热收缩薄膜
评论
0/150
提交评论