嵌入式C++高级编程

合集下载

粤嵌知识:嵌入式C编程技巧

粤嵌知识:嵌入式C编程技巧

粤嵌知识:嵌入式C编程技巧预处理器(Preprocessor)1 . 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL●#define 语法的基本知识(例如:不能以分号结束,括号的使用,等等)●懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。

●意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L,告诉编译器这个常数是的长整型数。

●如果你在你的表达式中用到UL(表示无符号长整型),那么你有了一个好的起点。

记住,第一印象很重要。

2 . 写一个“标准”宏MIN ,这个宏输入两个参数并返回较小的一个。

#define MIN(A,B) ((A)<= (B) ? (A) : (B))这个测试是为下面的目的而设的:●标识#define在宏中应用的基本知识。

这是很重要的,因为直到嵌入(inline)操作符变为标准C的一部分,宏是方便产生嵌入代码的唯一方法,对于嵌入式系统来说,为了能达到要求的性能,嵌入代码经常是必须的方法。

●三重条件操作符的知识。

这个操作符存在C语言中的原因是它使得编译器能产生比if-then-else更优化的代码,了解这个用法是很重要的。

●懂得在宏中小心地把参数用括号括起来●我也用这个问题开始讨论宏的副作用,例如:当你写下面的代码时会发生什么事?least = MIN(*p++, b);3. 预处理器标识#error的目的是什么?死循环(Infinite loops)4. 嵌入式系统中经常要用到无限循环,怎么样用C编写死循环呢?这个问题用几个解决方案。

首选的方案是:while(1){}一些程序员更喜欢如下方案:for(;;){}这个语法没有确切表达到底怎么回事。

第三个方案是用gotoLoop:...goto Loop;这是一个汇编语言程序员的思路。

单片机编程语言比较C语言vs汇编语言

单片机编程语言比较C语言vs汇编语言

单片机编程语言比较C语言vs汇编语言单片机编程语言比较:C语言 vs 汇编语言单片机是一种嵌入式系统的核心组成部分,它们通过编程语言来控制硬件设备的操作。

在单片机编程中,C语言和汇编语言是两种常用的编程语言。

本文将比较C语言和汇编语言在单片机编程中的优势和劣势。

一、C语言C语言是一种高级编程语言,它的语法结构更接近自然语言,容易理解和学习。

以下是C语言在单片机编程中的一些优势:1. 可移植性:C语言的代码可以在不同的单片机上进行移植,只需要对底层操作进行少量的修改。

这大大简化了程序的开发和维护工作。

2. 抽象性:C语言提供了丰富的库函数和高级结构,可以简化底层操作的复杂性。

通过使用函数和模块化编程思想,可以更快速地开发出稳定的单片机应用程序。

3. 易于阅读和维护:C语言的语法规则相对简单,代码的可读性强。

在程序规模庞大或者需要频繁修改的情况下,C语言的易读性可以提高代码的可维护性。

然而,C语言也存在一些劣势:1. 速度较慢:相对于汇编语言而言,C语言程序的执行速度较慢,因为C语言的代码通常需要编译成机器码才能执行。

2. 存储占用较多:C语言中的库函数和高级结构对内存的消耗较大,这可能对内存资源较为紧缺的单片机造成影响。

二、汇编语言汇编语言是一种低级编程语言,它直接操作硬件寄存器和指令,具有更高的执行效率。

以下是汇编语言在单片机编程中的一些优势:1. 执行速度快:汇编语言直接操作底层硬件,没有C语言的编译和解释过程,所以执行速度更快。

在对执行效率要求较高的应用中,使用汇编语言可以更好地控制时间和资源。

2. 存储占用较少:使用汇编语言可以减少对内存的消耗,因为它没有C语言中的库函数和高级结构。

然而,汇编语言也存在一些劣势:1. 学习曲线陡峭:汇编语言的语法和操作方式与底层硬件紧密相关,需要较长的学习时间和经验积累才能熟练掌握。

2. 不易维护:汇编语言的可读性较差,代码的维护和理解难度较大。

汇编语言中常常需要直接处理内存和寄存器,这要求程序员对硬件结构有深入的理解。

嵌入式C高级编程笔试A(有答案)3.11

嵌入式C高级编程笔试A(有答案)3.11

《嵌入式C高级编程笔试》试卷A一、选择题(35*2’)注意程序运行在32位系统下1. 语句printf(″s\\t″)的输出结果为( B )A s\\tB s\tC s\D s2.若有条件表达式(exp)?a++:b--,则以下表达式中能完全等价于表达式(exp)的是(B)A、(exp==0)B、(exp!=0)C、(exp==1)D、(exp!=1)3. float a = 3.2;(int)a;printf("a = %d, \n", a);打印什么,运行后a的类型是(D)A. 3.000000, intB. 3, intC. 3.0 floatD. 既不是3,也不是3.000000, float4.有以下代码:void func(){int a;a++;printf("a = %d\n", a);}那么变量a储存在( A )A. 栈B. 堆C. 正文段D. 未初始化数据段5. 在C语言中, char型数据在内存中的存储形式是( D )A、补码B、反码C、原码D、ASCII码6.假如指针p已经指向某个整型变量x,则(*p)++相当于()BA、p++B、x++C、*(p++)D、&x++7.为了避免嵌套的条件分支语句if-else的二义性,C语言规定:C程序中的else总是与( C )组成配对关系。

A. 缩排位置相同的ifB. 在其之前未配对的ifC. 在其之前未配对的最近的ifD.同一行上的if8.设A为存放(短)整型的一维数组,如果A的首地址为P,那么A中第i 个元素的地址为( B )。

A.P+i*2B. P+(i-1)*2C. P+(i-1)D. P+i9.有函数void func(){//staic int c=0;c++;printf("%d\n", c);}那么连续调用两次,打印的结果是?( B )A. 1, 1B. 1, 2C. 123495,123496(因为c没初始化,内部的值随机,第二次会比第一次加1)D. 123495, 123495(因为c没初始化,内部的值随机,并且,值不会增加)10.如果有以下代码:char string[] = "love me please";char *p = string;char *q = p + 4;*q++ = '\0';printf("\"%s\"", p);printf("\"%s\"", q);分别打印:( B )A. "love me please" ""B. "love" "me please"C. "love me please" "me please"D. 因为常量字符串不能修改,会发生段错误11.free(p);哪个是错误的( D )A. p的值必须是malloc的返回值B. 一个指针不能被连续free两次C. free了p以后p是野指针,应该置为NULLD. free了以后p的值会自动置为NULL,所以*p = 9会段错误12.下列描述中不正确的是( C )。

c 的工作原理

c 的工作原理

c 的工作原理
C是一种通用的高级编程语言,广泛应用于系统软件开发和嵌
入式系统领域。

它的工作原理是通过将C代码编译成机器码
来实现程序的运行。

C语言工作的基本流程是:首先,程序员使用C语言编写源代码文件,源代码文件以.c作为扩展名。

然后,使用C编译器
对源代码进行编译,将其转换成机器码文件(也称为目标文件),目标文件以.obj作为扩展名。

接下来,链接器将目标文
件与其他库文件一起链接,生成可执行文件。

在编译过程中,C编译器会对源代码进行词法分析、语法分析
和语义分析。

词法分析器将源代码文件分解为一系列的词法单元,如关键字、标识符、运算符和常量等。

语法分析器根据语法规则,将词法单元组织成语法树,检查代码是否符合语法规范。

语义分析器对语法树进行类型检查,确保变量的使用是合法的,并进行符号表的管理。

在链接过程中,链接器将目标文件与库文件进行合并。

库文件通常包含一些常用的函数和数据结构,供程序调用。

链接器将这些函数和数据结构的引用替换为实际的地址,以便程序能够正确地调用它们。

最终生成的可执行文件可以在操作系统上运行。

当执行程序时,操作系统会将程序加载到内存中,并按照机器码的指令依次执行,从而完成程序的运行。

总结来说,C的工作原理是将C代码编译成机器码,并通过链接生成可执行文件,最终在操作系统上运行。

这个过程包括词法分析、语法分析、语义分析、目标文件生成和链接等步骤。

嵌入式c语言程序设计

嵌入式c语言程序设计

嵌入式c语言程序设计嵌入式C语言程序设计嵌入式C语言程序设计是指在嵌入式系统中使用C语言进行编程的一种技术。

嵌入式系统是指被嵌入到其他设备中的计算机系统,它通常具有特定的功能和任务。

嵌入式C语言程序设计具有高效、灵活、可移植等特点,因此在嵌入式系统开发中得到广泛应用。

一、嵌入式系统概述嵌入式系统广泛应用于各个领域,如消费电子、汽车电子、医疗设备、工业控制等。

嵌入式系统通常由处理器、存储器、输入输出设备和特定功能模块等组成。

与通用计算机系统相比,嵌入式系统的资源有限,因此需要对程序进行精简和优化,以满足系统的实时性和可靠性要求。

二、嵌入式C语言的特点1. 简洁高效:C语言是一种高级语言,具有简洁、高效的特点。

使用C语言可以以较少的代码实现复杂的功能,提高开发效率和系统性能。

2. 可移植性强:C语言是一种可移植性较强的语言。

嵌入式C语言程序可以在不同的嵌入式系统上进行移植,只需做出适当的修改即可。

3. 丰富的库函数支持:C语言提供了丰富的库函数,如字符串处理、数学计算、文件操作等,方便开发人员进行程序设计。

4. 直接访问硬件:嵌入式C语言程序可以直接访问硬件资源,如寄存器、外设等,使得程序可以更加灵活和高效地控制系统。

三、嵌入式C语言程序设计的基本原则1. 软硬件接口设计:嵌入式C语言程序需要与硬件进行交互,因此需要设计合理的软硬件接口,确保程序能够正确地访问硬件资源。

2. 系统资源管理:嵌入式系统的资源有限,因此需要合理地管理系统资源,包括内存、处理器时间、外设等,以满足系统的实时性和可靠性要求。

3. 实时性要求:嵌入式系统通常需要实时响应外部事件,因此嵌入式C语言程序需要按时完成任务,避免出现延迟或死锁等问题。

4. 代码优化:嵌入式系统的资源有限,因此需要对程序进行优化,以减少代码量、提高运行效率和节约资源消耗。

5. 异常处理:嵌入式系统可能会面临各种异常情况,如硬件故障、通信异常等,嵌入式C语言程序需要具备相应的异常处理机制,以保证系统的稳定性和可靠性。

C语言嵌入式系统编程修炼之道

C语言嵌入式系统编程修炼之道

C语言嵌入式系统编程修炼之道收藏C语言嵌入式系统编程修炼之道——背景篇 (1)C语言嵌入式系统编程修炼之道——软件架构篇 (4)1.模块划分 (4)2.多任务还是单任务 (5)3.单任务程序典型架构 (6)4.中断服务程序 (7)5.硬件驱动模块 (9)6.C的面向对象化 (10)总结 (10)C语言嵌入式系统编程修炼之道——内存操作篇 (12)1.数据指针 (12)2.函数指针 (13)3.数组vs.动态申请 (14)4.关键字const 155.关键字volatile. 166.CPU字长与存储器位宽不一致处理 (17)总结 (18)C语言嵌入式系统编程修炼之道——屏幕操作篇 (19)1.汉字处理 (19)2.系统时间显示 (20)3.动画显示 (21)4.菜单操作 (22)5.模拟MessageBox函数 (24)总结 (26)C语言嵌入式系统编程修炼之道——键盘操作篇 (27)1.处理功能键 (27)2.处理数字键 (28)3.整理用户输入 (29)总结 (30)C语言嵌入式系统编程修炼之道——性能优化篇 (31)1.使用宏定义 (31)2.使用寄存器变量 (31)3.内嵌汇编 (32)4.利用硬件特性 (32)5.活用位操作 (33)总结C语言嵌入式系统编程修炼之道——背景篇不同于一般形式的软件编程,嵌入式系统编程建立在特定的硬件平台上,势必要求其编程语言具备较强的硬件直接操作能力。

无疑,汇编语言具备这样的特质。

但是,归因于汇编语言开发过程的复杂性,它并不是嵌入式系统开发的一般选择。

而与之相比,C语言——一种“高级的低级”语言,则成为嵌入式系统开发的最佳选择。

笔者在嵌入式系统项目的开发过程中,一次又一次感受到C语言的精妙,沉醉于C语言给嵌入式开发带来的便利。

本文的目的在于进行“C语言嵌入式系统开发的内功心法”秀,一共包括25招。

图1给出了本文的讨论所基于的硬件平台,实际上,这也是大多数嵌入式系统的硬件平台。

C语言嵌入式编程与硬件接口

C语言嵌入式编程与硬件接口

C语言嵌入式编程与硬件接口在当今技术高度发达的社会中,嵌入式系统已经广泛应用于各个领域,其重要性不言而喻。

而作为嵌入式系统的开发语言之一,C语言在嵌入式领域中占据着重要地位。

本文将探讨C语言在嵌入式编程中的应用,并重点介绍C语言与硬件接口的相关知识。

一、概述嵌入式系统由硬件和软件两部分组成,而C语言作为一种高级编程语言,可以帮助我们有效地管理和控制硬件资源。

在嵌入式开发中,C 语言可以实现与硬件设备的交互,并通过编写底层驱动程序来控制外设。

二、C语言数据类型C语言提供了多种数据类型,以适应不同的硬件设备和数据存储需求。

其中包括整型、浮点型、字符型等基本数据类型,以及结构体、枚举等派生数据类型。

在嵌入式编程中,我们需要灵活地选择合适的数据类型来处理与硬件相关的数据。

三、C语言函数库C语言提供了丰富的函数库,其中包括标准函数库和硬件驱动函数库。

标准函数库提供了各种用于处理字符、字符串、数学计算等功能的函数,而硬件驱动函数库则为我们提供了与硬件设备通信的接口函数。

通过合理地利用这些函数库,我们可以方便地对硬件设备进行读写操作。

四、C语言与硬件接口开发1. GPIO控制嵌入式系统常用的一种硬件接口是GPIO(通用输入输出),它可以实现与其他外设的连接和通信。

通过C语言编写的GPIO控制程序,我们可以实现对单片机的输入输出控制,包括输入状态读取和输出电平设置。

2. 中断处理中断是嵌入式系统中常用的事件触发机制,它可以使处理器在特定事件发生时立即执行响应操作。

C语言可以通过编写中断处理函数来实现对中断事件的处理,从而提高系统的实时性和响应能力。

3. 串口通信串口通信是嵌入式系统与外部设备进行数据交互的一种重要方式。

C语言提供了与串口通信相关的函数库,可以方便地进行数据的发送和接收。

通过串口通信,我们可以与外部设备进行数据传输、调试和联机下载等操作。

4. 定时器控制定时器是嵌入式系统中用于产生精确时间延迟和计时的硬件设备。

常见的高级程序设计语言

常见的高级程序设计语言

常见的高级程序设计语言程序设计语言是计算机程序员用来编写和开发软件应用程序的工具。

随着计算机技术的不断发展,出现了许多种高级程序设计语言,这些语言在编程效率、代码可读性和灵活性方面都有所不同。

本文将介绍几种常见的高级程序设计语言。

一、C语言C语言是一种广泛应用的高级编程语言,它具有简洁、高效和可移植性的特点。

C语言最初由贝尔实验室的丹尼斯·里奇在1972年开发,目的是用于开发UNIX操作系统。

C语言被广泛应用于系统软件开发、嵌入式系统、游戏开发等领域。

C语言具有丰富的库函数和强大的指针操作能力,可以直接访问底层硬件,因此它在性能要求较高的项目中得到广泛应用。

二、Java语言Java语言是一种跨平台的高级编程语言,由Sun Microsystems(现为Oracle)公司于1995年推出。

Java语言具有简单、面向对象和可移植的特点。

Java程序可以在不同的操作系统上运行,这得益于Java虚拟机(JVM)的存在。

Java语言广泛用于企业级应用开发、手机应用程序开发和Web应用程序开发。

Java具有丰富的类库和强大的异常处理机制,使得开发人员能够更加高效地编写可靠的软件。

三、Python语言Python语言是一种简单、易学且功能强大的高级编程语言。

Guido van Rossum于1989年开始设计Python,并在1991年发布了第一个版本。

Python语言具有清晰、优雅的语法风格,被广泛应用于Web开发、数据科学和人工智能等领域。

Python拥有大量的第三方库和工具,使得开发人员可以快速构建各种应用程序。

Python语言还支持面向对象编程、函数式编程和模块化编程,具有良好的代码可读性和可维护性。

四、C++语言C++语言是一种扩展的C语言,由比雅尼·斯特劳斯特鲁普于1983年首次提出。

C++语言融合了面向对象编程和通用编程,并在C语言的基础上增加了许多新特性。

C++语言被广泛应用于游戏开发、图形界面开发和高性能应用程序开发。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《嵌入式C++面向对象高级编程》笔试试卷一、选择题1. 下列关于类和对象的叙述中,错误的是( ) (2分)A.一个类只能有一个对象B.对象是类的具体实例C.类是对某一类对象的抽象D.类和对象的关系是一种数据类型与变量的关系2. 当将一个类A或函数f()说明为另一个类B的友元后,类A或函数f()能够直接访问类B 的( )。

(2分)A.只能是公有成员B.只能是保护成员C.只能是除私有成员之外的任何成员D.任何权限的成员3. 类中定义的成员默认为( )访问属性。

(2分)A.publicB.privateC.protectedD.friend4. 一个类的友元不是该类的成员,与该类的关系密切,所以它( )。

(2分)A.有this指针,有默认操作的对象B.没有this指针,可以有默认操作的对象C.有this指针,不能执行默认操作D.没有this指针,也就没有默认操作的对象5. 假定AA为一个类,a为该类私有的数据成员,GetValue( )为该类公有函数成员,它返回a的值,x为该类的一个对象,则访问x对象中数据成员a的格式为( )。

(2分)A.x.aB.x.a()C.x->GetValue()D.x.GetValue()6. 对于任一个类,用户所能定义的构造函数的个数至多为( )。

(2分)A.0B.1C.2D.任意个7. 一个类的析构函数通常被定义为该类的( )成员。

(2分)A.私有B.保护C.公用D.友元8. 有如下类声明:class Foo {int bar; };则Foo类的成员bar是()(2分)A.公有数据成员B.公有成员函数C.私有数据成员D.私有成员函数9. 关于封装,下列说法中不正确的是( )。

(2分)A.通过封装,对象的全部属性和操作结合在一起,形成一个整体B.通过封装,一个对象的实现细节被尽可能地隐藏起来(不可见)C.通过封装,每个对象都成为相对独立的实体D.通过封装,对象的属性都是不可见的10. 假定AB为一个类,则执行“AB *s=new AB(a,5);”语句时得到的一个动态对象为( )。

(2分)A.sB.s->aC.s.aD.*s11. 对于一个类的构造函数,其函数名与类名( )。

(2分)A.完全相同B.基本相同C.不相同D.无关系12. 在一个类的定义中,包含有( )成员的定义。

(2分)A.数据B.函数C.数据和函数D.数据或函数13. 假定AB为一个类,则执行AB x;语句时将自动调用该类的( )。

(2分)A.有参构造函数B.无参构造函数C.拷贝构造函数D.赋值构造函数14. 若类X是类Y的友元类,则下列哪种访问关系是正确的(2分)A.类X的成员不能访问类Y的私有成员B.类X的成员可以访问类Y的私有成员C.类Y的成员可以访问类X的私有成员D.只有类Y的公共成员才能访问类X的私有成员15. 假定AB为一个类,则执行“AB a, b(3), *p;”语句时共调用该类构造函数的次数为( )。

(2分)A.2B.3C.4D.516. 在C++中,当一个对象被创建后,它的每一个成员函数都含有一个系统自动生成的隐含的指针,称之为( )指针。

(2分)A.对象B.派生C.基类D.this17. 静态数据成员的初始化是在( )中进行的。

(2分)A.构造函数B.任何成员函数C.所属类D.类体外18. 对于公有继承,基类中的私有成员在派生类中将( )。

(2分)A.能够直接使用成员名访问B.能够通过成员运算符访问C.仍然是基类的私有成员D.变为派生类的私有成员19. 建立包含有类对象成员的派生类对象时,自动调用构造函数的执行顺序依次为( )的构造函数。

(2分)A.自己所属类、对象成员所属类、基类B.对象成员所属类、基类、自己所属类C.基类、对象成员所属类、自己所属类D.基类、自己所属类、对象成员所属类20. 派生类的成员函数可以直接访问基类的()成员。

(2分)A.所有B.公有和保护C.保护和私有D.私有21. 在c++中,一个虚函数是通过关键字( )放在其基类说明的前面来加以说明的. (2分)A.virtualB.protectedC.operatorD.this22. 在C++中,对于基类的protected成员,当以protected方式派生一个新类时。

该成员将成为派生类的( )成员。

(2分)A.privateB.protectedC.publicD.非法23. 面向对象方法的多态性是指()。

(2分)A.一个类可以派生出多个特殊类B.一个对象在不同的运行环境中可以有不同的变体C.针对一消息,不同的对象可以以适合自身的方式加以响应D.一个对象可以是由多个其他对象组合而成的24. 抽象类是():(2分)A.不可以定义对象B.可以定义对象C.不可以派生新类D.不可以输出25. 假定k是一个double类型的变量,则关于变量p的正确定义语句为( )。

(2分)A.double p=&k;B.int *p=&k;C.double *p=&k;D.char *p=”Thank you!”;26. 若有定义:int aa[8];则以下表达式中不能代表数组元素aa[1]的地址的是( )。

(2分)A.&aa[0]+1B.&aa[1]C.&aa[0]++D.aa+127. 假定指针变量p定义为“int *p=new int;”,要释放p所指向的动态内存,应使用语句( )。

(2分)A.delete p;B.delete *p;C.delete &p;D.delete []p;二. 判断1. 域运算符(::)描述的是类和成员之间的关系。

答:√2. 静态成员函数只能访问静态成员变量。

答:√3. 构造函数和析构函数都可以重载。

答:×4. 在公有继承中,基类中的公有成员和私有成员在派生类中都是可见的。

答:×5.抽象类不可以继承,只能派生答:×6. 类的私有成员只能被类中的成员函数访问,任何类以外的函数对它们的访问都是非法的。

答:×7. 友元函数的声明不受访问区域的影响。

答:×8. 子类可以继承父类的所有成员。

答:×9. 使用new申请的内存,在程序执行结束时,必须使用delete释放。

答:√10. 类A是类B的友元,则类B一定是类A的友元。

答:×11. 静态成员变量每个对象都有一份拷贝。

答:×12. 子类可以改造从父类继承的成员。

答:√三、问答题1. 什么是“引用”?申明和使用“引用”要注意哪些问题?将“引用”作为函数参数有哪些特点?答:引用是个别名,当建立引用的时候,程序用另一个变量或对象的名字初始化他。

引用只有申明,没有定义,只是对原来变量的别名,不占空间。

使用引用传参,避免了变量复制的开销。

2、C++中的继承有几种形式?各种方式中的派生类对基类成员的访问规则有什答:3种。

publicprivateprotected基类(父类)得私有成员,派生类(子类)都不能访问;基类得公有成员,派生类得继承方式决定了其函数得形式!基类得保护成员在派生类得公有继承中也是保护类型!3、举一个多态的例子,并以C++的格式给于定义和实现。

答:李氏兄妹属于李氏家族,李氏是基类(这里还是抽象的纯基类),李氏又派生出两个子类(李氏男和李氏女),李氏男会所有男子项目的比赛(李氏男的成员函数),李氏女会所有女子项目的比赛(李氏女的成员函数)。

姓李的人都会发言(基类虚函数),李氏男和李氏女继承自李氏当然也会发言,只是男女说话声音不一样,内容也会又差异,给人感觉不同(李氏男和李氏女分别重新定义发言这个虚函数)。

李氏两兄妹就是李氏男和李氏女两个类的实体。

class no_virtual{public:void fun1() const{}int fun2() const { return a; }private:int a;}class one_virtual{public:virtual void fun1() const{}int fun2() const { return a; }private:int a;}class two_virtual{public:virtual void fun1() const{}virtual int fun2() const { return a; }private:int a;}4、派生类的构造函数和父类构造函数的执行顺序?答:先执行父类的构造函数。

5、什么是虚基类?他的作用是什么?答:在继承中产生歧义的原因有可能是继承类继承了基类多次,从而产生了多个拷贝,即不止一次的通过多个路径继承类在内存中创建了基类成员的多份拷贝。

虚基类的基本原则是在内存中只有基类成员的一份拷贝。

这样,通过把基类继承声明为虚拟的,就只能继承基类的一份拷贝,从而消除歧义。

6、解释:深拷贝,浅拷贝。

答:当出现类的等号赋值时,会调用拷贝函数在未定义显示拷贝构造函数的情况下,系统会调用默认的拷贝函数即浅拷贝,它能够完成成员的一一复制。

当数据成员中没有指针时,浅拷贝是可行的。

但当数据成员中有指针时,如果采用简单的浅拷贝,则两类中的两个指针将指向同一个地址,当对象快结束时,会调用两次析构函数,而导致指针悬挂现象。

深拷贝会在堆内存中另外申请空间来储存数据,从而也就解决了指针悬挂的问题。

四、看程序题1.分析以下程序的执行结果#include<iostream.h>class Sample{int A[10][10];public:int &operator()(int,int);};int &Sample::operator()(int x,int y){return A[x][y];}void main(){Sample a;int i,j;for(i=0;i<10;i++)for(j=0;j<10;j++)a(i,j)=i+j;for(i=0;i<10;i++)cout<<a(i,1)<<" ";cout<<endl;}答:输出结果:1 2 3 4 5 6 7 8 9 10先把A[10][10]每一位上赋值,两个下标只和为其值,在输出第二列的值。

题2. 回答问题:①该程序执行后的输出结果是什么?为什么?#includeclass A{public:virtual void act1();void act2(){act1();}};void A::act1(){ cout”A::act1() called。

”}class B:public A{public:void act1();}void B::act1(){cout”B::act1() called。

相关文档
最新文档