自考c++程序设计简答题

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

自考C++重点简答题(修订版)

1、什么是数据封装? P74

答:(1)封装就是把对象的属性和操作结合成一个独立的系统单位,并尽可能隐藏对象的内部细节。(2)面向对象的封装原则,一个对象的属性和操作是紧密结合的,对象的属性只能由这个对象的操作来存取。对象的操作分为内部操作和外部操作。内部操作只供对象内部的其他操作使用,不对外提供。外部操作对外提高一个消息接口,通过这个接口接受外部对象的消息并为之提供操作(服务)。对象内部数据结构的这种不可访问性称为信息(数据)隐藏。

(3)在面向对象的程序设计中,将数据和对该数据进行合法操作的函数封装在一起作为一个类的定义,对象被说明具有一个给定类的变量。

(4)在类中,封装是通过存取权限实现的。每个给定类的对象包含这个类所规定的若干私有成员、公有成员及保护成员。完好定义的类一旦建立,就可看成完全封装的实体,可以作为一个整体单元使用。(5)在C++中,类是支持数据封装的工具,对象则是数据封装的实现。C ++通过建立用户定义类型(类)支持数据封装。C++中的类是数据和函数的封装体,数据将被隐藏在封装体中,该封装体通过操作接口与外界交换信息。类的实际内部工作隐藏起来,使用完好定义的类的用户不需要知道类是如何工作的,只要知道如何使用它即可

2、如何使用复制构造函数,举例说明。 P80

答:(1)构造函数的参数可以是一个已有初始化数值的对象,这种构造函数称作复制构造函数。复制构造函数是一类特殊而且重要的函数,当用户没有定义复制构造函数时,系统会提供一个默认复制构造函数。(2)使用复制构造函数的情况:

1)当用一个类的对象去初始化另一个对象时,调用复制构造函数

2)如果函数的形参是类的对象,调用函数时,进行形参和实参的结合时,需要调用复制构造函数

3)如果函数的返回值是对象,当函数调用完成返回时,调用赋值构造函数

(3)对类A而言,复制构造函数的原型如下:A::A(A &)

从这个函数原型来看,首先它是一个构造函数,其次,它的参数有些特别,是引用类自己的对象,使用引用是从程序执行效率的角度考虑的。为了不改变原有对象,更普通的形式是像下面这样使用const限定:A::A(const A &)

(4)举例说明.对Point类而言,复制构造函数的原型如下:

Point ( Point & );

它的定义如下:

Point::Point(Point &t)

{ x=t.x ; y= t.y;}

3、静态对象和普通对象在构造函数和析构函数中的区别? P107

答:(1)静态对象是使用关键字static声明的类的对象,它的构造函数与析构函数的调用特点,如下:

1)构造函数在代码执行过程中,第一次遇到它的变量定义时被调用,但直到整个程序结束之前仅调用一次。2)析构函数在正整个程序退出之后被调用,同样也只调用一次。

(2)普通对象在在创建时调用构造函数,在生命周期内结束时调用析构函数,释放所占的内存空间。

4、单一继承的一般形式? P130

答:在C++中,声明单一继承的一般形式如下:

class 派生类名:访问控制基类名{

private:

成员声明列表

protected:

成员声明列表

public

成员声明列表

};

这里和一般的类的声明一样,用关键字class声明一个新的类。冒号后面的部分指示这个新类是哪个基类的派生类。所谓“访问控制”是指如何控制基类成员在派生类中的访问属性,它是3个关键字public、protected、和private中的一个。一对大括号“{}”中是用来声明派生类自己的成员的。

5、类的访问权限? P133

6、什么是类模版?与函数模版的区别?P147

答:(1)类模板是对象特性更一般的抽象。简言之,一个类模板就是一个抽象的类。可以用类模板来定义类

(2)类模板的成分及语法

1)创建类模板,在类模板参数表之后应用类声明。模板参数用做数据成员的类型、成员函数的类型或成员函数的参数类型等。类模板声明的一般方法如下:

template <类模板参数>

class 类名{//类体};

(3)类模板对象

类模板也称为参数化类。初始化类模板时,只要传给它具体的指定数据类型就产生相应的模板类。用类模板定义对象的一般格式如下:

类名<模板实例化参数类型>对象名(构造函数实参列表);

类名<模板实例化参数类型>对象名; //默认或者无参数构造函数

(4)在类体外面定义成员函数时,必须用template重写类模板声明。一般格式如下:

Template <模板参数>

返回类型类名<模板类型参数>:: 成员函数名(函数参数列表){//函数体}

(5)模板参数实例化参数类型包括数据类型和值。

(6)函数模板机制为用户提供了功能相似、仅数据类型不同的函数设计为通用的函数模板的方法。函数模板的语句格式为:

Template <模板形参表>

返回类型函数名(函数模板形参表)

(7)当用实际的类型来实例化这种函数时,就好像按照模板来制造新的函数一样,所以这种函数称为函数模板。将函数模板与某个具体数据类型连用,就产生了模板函数,又称这个过程为函数模板实例化。

7、什么是静态联编的多态性?什么是动态联编的多态性? P167

1.编译时的多态性:静态联编所支持的多态性为编译时的多态性。当调用重载函数时,可根据调用时所使用的实参在编译时就确定下来应调用哪个函数。

2.运行时的多态性:动态联编所支持的多态性称为运行时的多态性,这由虚函数来支持。虚函数类似于重载函数,但与重载函数的实现的策略不同,即对虚函数的调用使用动态联编。编译时的多态性通过使用重载函数或模板获得。运行时的多态性通过使用继承和虚函数来获得。

8、简述虚函数实现多态性的条件。 P170

关键字virtual指示C++编译器对调用虚函数进行动态联编。这种多态性是程序运行到需要的语句处才动态确定的,所以成为运行时的多态性。产生运行时的多态性有如下3个前提:(1)类之间的继承关系满足赋值兼容性原则;(2)改写了同名虚函数;(3)根据赋值兼容性规则使用指针(或引用)。满足前两条并不一定产生动态联编,必须同时满足第3条才能保证实现动态联编。第3条又分为两种情况:第1种是已经演示过的按赋值兼容性规则使用基类指针(或引用)访问虚函数;第2种是把指针(或引用)作为函数参数。即这个函数不一定是类的成员函数,可以是普通函数,而且可以重载。

相关文档
最新文档