c++复习剖析

上传人:今*** 文档编号:105861993 上传时间:2019-10-13 格式:DOC 页数:8 大小:110.50KB
返回 下载 相关 举报
c++复习剖析_第1页
第1页 / 共8页
c++复习剖析_第2页
第2页 / 共8页
c++复习剖析_第3页
第3页 / 共8页
c++复习剖析_第4页
第4页 / 共8页
c++复习剖析_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《c++复习剖析》由会员分享,可在线阅读,更多相关《c++复习剖析(8页珍藏版)》请在金锄头文库上搜索。

1、复习题一、全面复习课程内容和布置的作业、课堂讲过的例题二、练习下列题型示例。要求掌握各种基本概念和基本原理,学会灵活应用。(部分与书上重复)1、简要回答下列问题(1)什么是面向对象的程序设计?(2)什么是对象?它有哪些特征?什么是类?对象与类的关系是什么?(3)什么是消息?如何区分公有消息与私有消息?是对象之间相互请求或相互协作的途径,是要求某个对象执行其中某个功能操作的规格的说明。公有消息:由外界对象直接向它发送的消息私有消息:自己向本身发送的、不对外发布的、外界不必要了解的消息(4)什么是多态性?在面向对象系统中多态性表现在哪些方面?多态性是面向对象程序设计语言的另一个基本特征。多态性是指

2、当不同对象收到相同的消息时产生不同的动作。C+ +支持两种多态性,一种是编译时的多态性(静态),通过重载实现。另一种是运行时的多态性(动态),通过虚函数实现。编译时的多态性在一个类中说明的重载 由所带参数个数或参数类型的不同加以区分基类成员函数在派生类中 重载参数有差别 参数相同但属不同类使用“类名 : ”加以区别根据对象加以区别运行时的多态性 通过虚函数实现虚函数使用户在一个类等级中可以使用相同函数的多个版本,每一个版本均属于类等级中的不同的类,究竟使用哪一个特定的版本需要在运行中决定。虚函数的各个版本中,其返回值、函数参数的个数和类型必须是一致的(5)C+是如何实现数据封装和信息隐藏的?封

3、装的手段很多人把封装的概念局限于类,认为只有OO中的class才算是封装。这实际上是片面滴!在很多不使用类的场合,一样能采用封装的手法。下面俺随手举几个和OO无关的例子:a、通过文件比如C和C+支持对头文件的包含(#include)。因此,可以把一些相关的常量定义、类型定义、函数声明,统统封装到某个头文件中。b、通过namespace/package/moduleC+的namespace、Java的package、Python的module,想必各自的开发人员都很熟悉。这些语法虽然称呼各不相同,但具有相同的本质。因此,也可以利用这些语法,来进行封装。信息隐藏的手段和封装类似,很多程序员也把信息

4、隐藏的概念片面化认为信息隐藏仅限于private和protected关键字。所以,俺再随手举几个其它的信息隐藏手段。a、通过接口类可以通过定义接口类(Java中的interface、C+中的纯虚类)来实现信息隐藏。具体实现如下:定义一个接口类,仅包含一些公有的成员函数的声明(Java的abstract函数,C+的纯虚函数),没有任何函数实现,也没有任何成员变量。然后把具体的实现代码放到该接口类的一个派生子类中。由于调用者只看到接口类,看不到实现类。所以,同样可以达到信息隐藏。在某些情况下,使用这种手段达到的效果,会比基于访问控制(使用private关键字)的效果,更好。不过这种手段依赖于语言的

5、支持。使用该手法的编程语言,至少要支持继承、虚函数等语法。b、通过pimpl手法pimpl手法也叫作“OpaquePointer”手法。和接口类的手法不同,pimpl手法不需要靠继承、虚函数等语法的支持,因此对诸如C语言来说,很有用。(6)为什么要引入构造函数和析构函数?一个类的对象在定义时可以对其进行初始化(这点与普通变量一样),称为对象的初始化;同样在某个对象的生存期结束时,还要对数据成员进行一些清理工作。C+中初始化和清理工作主要由两个特殊的函数来完成,它们是构造函数和析构函数。(7)this指针的主要作用是什么?静态成员有哪些特性?C+提供了静态成员,用以解决同一个类的不同对象之间数据

6、成员和函数的共享问题。静态成员的特点是:不管这个类创建多少个对象,其静态成员在内存中只保留一份副本,这个副本为该类的所有对象所共享。面对对象方法中还有类属性的概念,类属性是描述类的所有对象的共同特征的一个数据项,对于任何对象实例,它的属性值是相同的,C+通过静态数据成员来实现类属性。(8)用成员函数重载运算符和用友元重载运算符,在定义和使用上有什么不同?(9)什么是重载?函数重载有几种表现形式?重载,是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。构造函数重载 定义参数个数或类型不同的多个构造函数类成员函数重载类以外的一般函数重载运 算

7、符 重 载封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是为了-代码重用。而多态则是为了实现另一个目的-接口重用(10)为什么要引入引用概念,在程序设计中它经常被用在什么场合? 引用是C+的另一种数据类型,它与指针有些相似性又有很大的不同。 引用就是给对象取一个别名。它可用在给函数传递大型的对象以及从函数中返回值;也可以是一个简单变量的独立引用。它是一种赋值、发送和返回复杂数据结构的方法,应用这种方法,系统不需要负担额外的开销,节省了内存空间。最大用途是作为函数的参数或返回值类型引用作为函数参数: 用在需要定义变量参数的函数中(传地址) 用在需给函数传递

8、对象的场合在定义变量参数时引用作为函数参数,它的更改将引起函数内部和函数外部的参数同步更改,这也就是按地址传递。使用引用比使用指针传递地址更加清晰。 在给函数传递对象时 引用用在需给函数传递对象的场合,避免了值传递时实参复制给形参的低效率。 引 用 返 回 值当返回值不是本函数内定义的局部变量时就可以返回一个引用。 通常情况下,引用返回值只用在需对函数的返回值重新赋值的场合。 函数返回的引用一般是对某一个函数参数的引用,而且这个参数本身也是引用类型。(11)简述引用与指针的异同。异:1.指针有自己的内存空间,引用只是一个符号2.引用被创建的同时必须被初始化,而指针可以在任何时候被初始化。3.不

9、能有NULL引用,引用必须与合法的存储单元关联,指针则可以是NULL 。4.一旦引用被初始化,就不能改变引用的关系(不能重新赋值),指针则随时可以改变所指的对象。5.函数参数中“引用传递”的性质像“指针传递”,而书写方式像“值传递”。同:参数是指针类型(如 int * i )时,可以实现形参与实参的同步改变。(指针传递)参数是引用类型(如 int & i)时,可以实现形参与实参的同步改变。(引用传递)引用传递与指针传递的效果相同并更加简洁直观(12)派生有几种方式,每种方式中派生类对基类成员的继承性如何?(P141)public,private,protected派生public派生,在派生类

10、里和外面都可以直接调用基类的公有部分protected保护派生,在派生类里可以直接调用,但是在派生外面不可以调用private私有派生,在派生类里和外面都不可以直接调用,但可以用函数间接调用(13)派生类构造函数和析构函数的构造规则是什么?执行顺序怎样?派生类的构造函数派生类构造函数(变元表) : 基类构造函数(变元表) , 对象成员1的构造函数(变元表) , , 对象成员n的构造函数(变元表) / ;必须定义派生类构造函数的情况派生类本身需要构造函数;定义派生类对象时,其相应的基类对象需调用带参数的构造函数。可以不定义派生类构造函数的情况:若基类使用缺省构造函数或不带参数的构造函数,在派生类

11、定义构造函数时,可以省略“ : 基类构造函数(变元表)”;此时若派生类不需初始化,则可以不定义派生类构造函数。派生类的析构函数 在派生类中是否要定义析构函数与基类无关,若派生类在退出其定义域前需要做释放内存等工作,就要定义析构函数。因析构函数是不带参数的,所以基类的析构函数不会因为派生类没有析构函数而不执行,它们是各自独立的。(14)在C+中的何种情况下要引入虚基类?解决多继承环境中因公共基类带来二义性的一种机制(15)什么是虚函数?函数重载与虚函数有哪些异同?(5.5)(16)在什么情况下要引入抽象类?抽象类有什么特点?抽象类的概念至少有一个纯虚函数的类抽象类只能用作其它类的基类,不能建立抽

12、象类对象。抽象类不能用作参数类型、函数返回类型或显式转换的类型。可以声明指向抽象类的指针和引用,此指针可以指向它的派生类,实现多态性。抽象类与接口紧密相关,它们不能示例化,并且常常部分实现或根本不实现。 特点: 1、抽象类不能直接实例化 2、允许(但不要求)抽象类包含抽象成员。 3、抽象类不能被密封2、单项选择题(1)在C+程序中,对象之间的相互通信通过 。A、继承实现 B、调用成员函数实现 C、封装实现 D、函数重载实现(2)友元关系不能 。A、继承 B、是类与类的关系C、是一个类的成员函数与另一个类的关系 D、提高程序的运行效率(3)下面说法正确的是 。 A、内联函数在运行时是将该函数的目

13、标代码插入每个调用该函数的地方B、内联函数在编译时是将该函数的目标代码插入每个调用该函数的地方C、类的内联函数必须在类体内定义 D、类的内联函数必须在类体外通过加关键字inline定义(4)假定一个类的构造函数为A( intaa , intbb ) a = aa - - ; b = a * bb - - ; ,则执行A x( 4 , 5 );语句后,x . a和x . b的值分别为 .A、4和5 B、5和4 C、4和20 D、20和5(5)对于类定义 class A public:virtual void func1( ) void func2( ) ; classB : publicA public:voidfunc1( ) cout class B func1 end1; virtual void func2( ) cout class B func2 end1; ;下面正确的叙述是 。A、A : func2()和B : func1()都是虚函数 B、A : func2()和B : func1()都不是虚函数C、B : func1()是虚函数,而A : func2()不是虚函数D、B : func1()不是虚函数,而A : func2()是虚函数(6)在公有继承的情况下,基类成员在派生类中的访问权限 。A、受限制 B、保持不变 C、受保护 D、

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号