面向对象程序设计_第1页
面向对象程序设计_第2页
面向对象程序设计_第3页
面向对象程序设计_第4页
面向对象程序设计_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、面向对象程序设计复习资料一、客观部分:(单项选择、多项选择、不定项选择、判断)(一)、选择部分考核知识点 : 程序设计的基本概念附 1.1.1 (考核知识点解释) :面向对象程序设计方法以 “对象” 为中心进行分析和设计, 将对象设计成解决目标问题 的基本构件, 思想是先将问题空间划分为一系列对象的集合, 再将具有相同属性和行为的对 象抽象成一个类, 采用继承机制来建立这些类之间的联系, 形成结构层次。 面向对象程序设 计方法的本质就是不断设计新的类和创建对象的过程。考核知识点 : C+ 源程序的组成附 1.1.2 (考核知识点解释)一个C+程序一般由多个函数组成。这些函数可以是用户根据需要编

2、写的自定义函数, 也可以是直接使用系统提供的标准库函数。函数体用一对花括号“ ”和“ ”括起来。任何 一个程序必须有且仅有一个主函数 mai n,程序从主函数开始执行。考核知识点 : 带默认形参值的函数附 1.1.3 (考核知识点解释)在调用函数时,需要针对函数中的每一个形参给出对应的实参。 C+中允许在函数定义 或函数声明时给出默认的形参值。 在调用函数时, 对于有默认值的形参, 如果没有给出相应 的实参, 则函数会自动使用默认形参值; 如果给出相应的实参, 则函数会优先使用传入的实 参值。默认形参值可以在两个位置指定:如果有函数声明,则应在函数声明处指定;否则,直 接在函数定义中指定。默认

3、形参值必须严格按照从右至左的顺序进行指定。考核知识点 : 函数重载附 1.1.4 (考核知识点解释)C+允许不同的函数具有相同的函数名,这就是函数重载。当调用一个函数时,除了要 写出函数名,还要根据函数的形参列表传递实参值。对于函数名相同的多个函数, 要在调用时能够区分开到底要调用哪个函数, 只能根据传 递实参在数量或类型上的不同来进行判断。 也就是说, 函数名相同的函数形参列表不能完全 一样,否则会因无法区分而报错。考核知识点 : 堆内存分配附 1.1.5 (考核知识点解释)在C+冲,使用new和delete这两个关键字完成堆内存分配和释放的操作。堆内存分配new的用法为:new数据类型表达

4、式;其中,表达式可以是常量,也可以 是变量, 其作用与声明数组时 里的表达式一样, 用于指定元素数目。 如果只申请一个元素 的空间,那么 表达式 部分可以不写: new 数据类型 ; 对于只申请一个元素空间的情况, 在分配内存的同时还可以进行内存初始化工作: new 数据类型 (表达式); 其中,表达式确定 了分配的内存中初始存储的数据。堆内存释放 delete 的用法为: delete p; 如果 p 所指向的堆内存只包含一个元素, 那么还可以将 省掉,即: delete p; 必须使用指针保存分配的堆内存首地址,这是由于 delete 须根据首地址进行堆内存释放,如果不知道首地址则无法释放

5、内存,从而造成内存 泄漏。考核知识点 : 引用的概念附 1.1.6 (考核知识点解释) 引用就是别名,变量的引用就是变量的别名,对引用的操作就是对所引用变量的操作。考核知识点 : 引用的声明与特点附 1.1.7 (考核知识点解释)引用就是一个别名, 声明引用不会再为其分配内存空间, 而是与所引用对象占据同一片 内存空间。因此,对引用的操作与对所有引用对象的操作效果完全一样。考核知识点 : 引用的声明与特点附 1.1.8 (考核知识点解释)引用就是一个别名, 声明引用不会再为其分配内存空间, 而是与所引用对象占据同一片 内存空间。因此,对引用的操作与对所有引用对象的操作效果完全一样。可以为指针变

6、量声明引用,其声明形式为:数据类型*&引用名=指针变量名 ;考核知识点 : 类和对象的基本概念、对象的声明附 1.1.9 (考核知识点解释)类是现实世界中客观事物的抽象, 即将具有相似静态属性和动态行为的对象集合归纳为 一个类。类是用户自定义的数据类型, 与基本数据类型一样, 需要声明类数据类型的变量, 即对 象,通过对一个个的实际对象实施不同的操作, 来解决问题。 声明对象的过程叫做类的实例 化。考核知识点 : 类成员的访问控制附 1.1.10 (考核知识点解释)类中可以出现多个访问说明符, 每个访问说明符可以出现多次, 不同的访问说明符出现 的顺序没有限制。如果没有指明是哪种访问级别,C+

7、编译系统默认为私有(private )成员 考核知识点 : 构造函数和析构函数附 1.1.11 (考核知识点解释)在C+中,对象的初始化工作是由构造函数来完成的。 构造函数是一种特殊的成员函数, C+规定可以在类内声明一个或多个构造函数,以满足对象多样性的初始化需要。构造函数 具有如下特征: 构造函数名与类名相同。 构造函数无任何函数返回类型说明。 一个新的对象被创建时(通过对象声明语句或使用new运算符在堆区创建动态对象) 属于该对象的构造函数被编译系统自动调用,完成该对象数据成员的初始化工作。 如果在类声明中没有给出构造函数,系统会自动给出一个默认的无参构造函数:类名( ) 如果在类中声明

8、了多个构造函数, 这就是构造函数的重载。 要求这些构造函数要有不 同的参数表,系统自动调用构造函数时按照函数重载的规则选择其中的一个构造函数。在对象的生存期结束时,有时也需要执行一些操作。这些工作就可以放在析构函数中。 析构函数是一个特殊的由用户定义的公有成员函数,析构函数具有如下特征: 析构函数名为:类名,如TntArray。 构造函数无任何函数返回类型说明。 析构函数无参数,所以不能被重载。 如果在类声明中没有给出析构函数,系统会自动给出一个默认的析构函数:类名 () 当对象的生命周期结束及用 delete 释放动态对象时,系统自动调用析构函数完成对 象撤销前的处理。考核知识点 : 构造函

9、数附 1.1.12 (考核知识点解释)一个新的对象被创建时(通过对象声明语句或使用new运算符在堆区创建动态对象),属于该对象的构造函数被编译系统自动调用,完成该对象数据成员的初始化工作。 考核知识点 : 拷贝构造函数附 1.1.13 (考核知识点解释)拷贝构造函数有如下特征:(1)拷贝构造函数名与类名相同,形参只有一个,是对象的引用,所以,不能重载拷贝构造函数。拷贝构造函数的原形为:类名(类名 &对象名);(2)拷贝构造函数无任何函数返回类型说明。(3)如果在类声明中没有给出拷贝构造函数,系统会自动给出一个默认的拷贝构造函 数,该拷贝构造函数只进行对象数据成员间的对位拷贝,即所谓的“浅拷贝”

10、 。(4)在某些情况下,用户必须在类定义中给出一个显式的拷贝构造函数,以实现用户 指定的用一个对象初始化另一个对象的功能,即所谓的“深拷贝” 。(5)在以下 3 种情况下,系统会自动调用拷贝构造函数: 当使用下面的声明语句用一个已存在的对象初始化一个新对象时, 系统会自动调用拷 贝构造函数:类名 新对象名 ( 已存在对象名 );或类名 新对象名 =已存在对象名 ; 对象作为实参,在函数调用开始进行实参和形参结合时,会自动调用拷贝构造函数, 完成由已知的实参对象初始化形参新对象的功能。 如果函数的返回值是类的对象, 在函数调用完成返回时, 系统自动调用拷贝构造函数, 用 return 后面的已知

11、对象来初始化一个临时新对象(所创建的临时对象只在外部表达式范 围内有效,表达式结束时,系统将自动调用析构函数撤销该临时对象) 。考核知识点 : 构造函数附 1.1.14 (考核知识点解释)在类的成员前如果加上关键字 static ,这种成员就是类的静态成员。类的静态成员包 括静态数据成员和静态成员函数。 类的静态成员的特点是: 静态成员属于类, 不属于任何对 象。无论有多少对象或没有对象, 静态成员都只有一份存于公用内存中, 被该类的所有对象 共享。在类定义中的数据成员声明前加上关键字 static ,就使该数据成员成为静态数据成员。 静态数据成员可以是public (公有)、private

12、(私有)或protected (保护)的。在下面定 义的 Account 类中, m_rate 被声明为私有静态成员。在类中声明的静态数据成员属于引用性说明, 并不实际分配内存。 在创建对象时, 会为 对象的数据成员分配存储空间。 但由于静态数据成员不属于任何对象, 所以在创建对象时也 不会为该类的静态数据成员分配存储空间。 所以,类设计者需要在类外对静态数据成员进行 定义。静态数据成员的定义形式如下:类型类名 : 静态数据成员名 =初值 ;类的静态数据成员不属于任何类,类的公有静态数据成员的一般访问形式是::也可以是:.或- 后两种访问方式中的“对象名”或“对象指针”只起到类名的作用,与具体

13、对象无关。 如果成员函数被声明为 static 的,它就是静态成员函数。像静态成员数据一样,静态 成员函数与具体对象无关。 静态成员函数不能访问一般的数据成员, 它只能访问静态数据成 员,也只能调用其他的静态成员函数。对类的静态成员函数的调用形式通常是::可以用成员访问操作符点( . )和箭头( -)为一个类对象或指向类对象的指针调用, 只是,这时候使用的只是对象的类型,与具体对象无关。考核知识点 : 构造函数附 1.1.15 (考核知识点解释)将一个类声明为另一个类的友类的语法形式为:friend ;或friend class ;将A类声明为B类的友类。声明后,A类的任何成员函数都有权访问B

14、类中的任何成员, 包括私有成员和保护成员。考核知识点 : 构造函数附 1.1.16 (考核知识点解释)每个类成员函数都含有一个指向被调用对象的指针,这个指针被称为 this 指针。 this 指针是一个隐含于每一个非静态成员函数中的特殊指针, 就是成员函数的一个类指针类型的 形参。当对一个对象调用非静态成员函数时, 编译程序先将该对象的地址传递给成员函数的 this 指针,以及完成其他的参数传递,然后再进入成员函数内部进行处理。在成员函数内 部存取数据成员或调用其他成员函数时,都是通过 this 指针隐式地引用它所指向的对象的 成员数据和成员函数。事实上,也可以通过 this 指针显式引用它所

15、指向对象的成员数据和 成员函数。由于有了 this 指针的存在,使得类中相同的成员函数会根据 this 指针指向对象的不同 而操作不同对象的数据成员。类的静态成员函数没有 this 指针。这是因为静态成员函数为类的所有对象所共有,不属于某一个对象一般情况下, this 指针隐式使用就可以了。但某些情况下需要显式使用。下面是需要 显式使用 this 指针的两种情况:(1)在类的非静态成员函数中返回类对象本身的时候,直 接使用“ return *this; ”。( 2)另外一种情况是当参数与成员变量名相同时。考核知识点 : string 类附 1.1.17 (考核知识点解释)使用 string 类

16、,必须在程序中包含头文件 string (注意,这里不是 string.h ,string.h 是 C 字符串头文件)。考核知识点 : 派生类的继承方式附 1.1.18 (考核知识点解释) 以公有方式继承时,基类的公有成员和保护成员的访问控制方式在派生类中保持不变, 仍作为派生类的公有成员和保护成员,基类的私有成员在派生类中不能直接访问。以私有方式继承时, 基类的公有成员和保护成员在派生类中都作为私有成员, 基类的私 有成员在派生类中不能直接访问。以保护方式继承时, 基类的公有成员和保护成员在派生类中都作为保护成员, 基类的私 有成员在派生类中无法直接访问。考核知识点 : 派生类的继承方式附

17、1.1.19 (考核知识点解释) 以公有方式继承时,基类的公有成员和保护成员的访问控制方式在派生类中保持不变, 仍作为派生类的公有成员和保护成员,基类的私有成员在派生类中不能直接访问。以私有方式继承时, 基类的公有成员和保护成员在派生类中都作为私有成员, 基类的私 有成员在派生类中不能直接访问。以保护方式继承时, 基类的公有成员和保护成员在派生类中都作为保护成员, 基类的私 有成员在派生类中无法直接访问。考核知识点 : 类型兼容附 1.1.20 (考核知识点解释)类型兼容是指在基类对象可以出现的任何地方, 都可以用公有派生类的对象来替代。 类 型兼容所指的是如下三种情况:(1)派生类对象可以赋

18、值给基类对象;(2)派生类对象可以初始化基类的引用;(3)基类指针可以指向派生类对象。考核知识点 : 虚析构函数附 1.1.21 (考核知识点解释)在调用派生类对象的析构函数后, 会自动调用基类对象的析构函数来释放基类中定义的 指针成员。考核知识点 : 错误地使用虚函数附 1.1.22 (考核知识点解释)只有类的成员函数才能声明为虚函数。 因为虚函数只适用于有继承关系的类对象, 所以 普通函数不能声明为虚函数。静态成员函数不能是虚函数,因为静态成员函数不受限于某个对象。内联函数不能是虚函数, 因为内联函数不能在运行中确定其位置。 即使虚函数放在类的 内部定义,编译时,仍将其看作是非内联的。构造

19、函数不能是虚函数。 因为构造时, 对象还是一片未定型的空间。 只有在构造完成后, 对象才能成为一个类的名副其实的实例。考核知识点 : 重载为类的友元函数附 1.1.23 (考核知识点解释)友元函数“ Complex operator-(Complex &c1,Complex &c2); ”实现了减法运算符的重 载。该函数函数名为 operator- ,有两个对象引用作为形参,返回值类型为对象类型。在主 函数中可以用 c1-c2 的形式调用 operator-() 函数,相当于: operator-(c1, c2); 考核知识点 : 成员运算符函数与友元运算符函数的比较 附 1.1.24 (考核

20、知识点解释)双目运算符计算时需要两个操作数, 所以调用运算符重载函数时必须将要计算的两个操 作数传递给函数。 对于成员重载函数, 必须是某个对象调用这个函数, 而且将这个对象的地 址传递给 this 指针,因此调用函数的这个对象就可以作为一个操作数传递给函数,另一个 操作数作为实参传递给形参即可, 这样成员重载函数只需要一个参数即可。 相对的, 友元函 数是系统直接调用, 所以两个操作数都要作为实参传递到函数中去, 所以友元重载函数需要 两个参数。考核知识点 : 运算符重载的规则附 1.1.25 (考核知识点解释)C+中不能重载的运算符只有5个:. (成员访问运算符).* (成员指针访问运算符

21、):(域运算符)?:(条件运算符)sizeof (长度运算符)考核知识点 : 运算符重载的规则 附 1.1.26 (考核知识点解释)C+规定,赋值运算符“=”,下标运算符“”,函数调用运算符“()”,类型转换运算 符“() ”,成员运算符“ -”必须重载为成员函数。而插入运算符“ ” 只能重载为非成员函数(友元函数) 。考核知识点 : 标准输入 / 输出流 附 1.1.27 (考核知识点解释)从键盘输入、向屏幕输出称为标准输入/输出。为了实现标准输入/输出,C+预定义了 4 个标准流对象: cin 、 cout 、 cerr 、 clog ,它们均包含于头文件 iostream 中。 考核知识

22、点 : 标准输入 / 输出流 附 1.1.28 (考核知识点解释)cin是istream 类的对象,用于处理标准输入(键盘输入);cout是ostream类的对象, 用于处理标准输出(屏幕输出) ; cerr 和 clog 都是 ostream 类的对象,均用于处理出错信 息标准输出。除了 cerr 不支持缓冲外,其他 3个对象都支持缓冲输入 /输出。 考核知识点 : 输入流的成员函数附 1.1.29 (考核知识点解释)istream 类提供了用于输入单个字符的成员函数 get() , istream 的对象 cin 可以调用 这个函数实现从键盘输入一个字符的操作。cin 调用 get() 有

23、两种格式:cin.get()或cin.get(ch)其中, ch 为字符型变量。考核知识点 : 文件的打开与关闭 附 1.1.30 (考核知识点解释)对文件进行输入 / 输出即读 / 写操作, 必须先打开文件, 使得文件与流对象建立关联, 然 后利用流对象调用文件流类的运算符或成员函数实现对文件的读写操作, 操作完毕后关闭文 件。考核知识点 : 文件的打开与关闭 附 1.1.31 (考核知识点解释)打开文件使用文件流类的成员函数 open() ,当然在打开文件之前要先定义流对象,如: ifstream infile;infile.open(file1.txt);或ofstream outfil

24、e;outfile.open(file2.txt);首先定义文件流对象 infile 用于文件的输入 (读)操作, 然后文件流对象 infile 调用 文件流类的成员函数 open() ,参数是要操作的磁盘文件名, open() 函数实现的功能是打开 文件 file1.txt ,并将流对象 infile 和文件建立关联。也可将两条语句合并成一条语句,如:ofstream outfile(file2.txt);这 样就 是在 定义 时调用带 参数 的构造 函 数创建流对象 outfile , 参数为文件 名 file2.txt ,这就是在构造函数中实现打开文件并将流对象 outfile 和文件建

25、立关联的操作。 考核知识点 : 函数模板的概念 附 1.1.32 (考核知识点解释)函数模板可以对不同类型的数据进行相同的处理, 其作用与函数重载类似, 但代码要简 单得多。考核知识点 : 函数模板的使用附 1.1.33 (考核知识点解释)函数模板需要实例化为模板函数后才能执行, 即用实际的数据类型代替类型参数。 实例 化的函数模板称为模板函数。函数模板的实例化是在函数调用时由编译器来完成的。当编译器遇到一个函数调用时, 便根据实参表中实参的类型和已定义的函数模板生成一个模板函数, 该模板函数的函数体与 函数模板的函数体相同,而形参表中的类型则以实参表中的实际类型为依据。(二)、判断部分考核知

26、识点:第一个C+S序附 1.2.1 (考核知识点解释)一个C+S序一般由多个函数组成。这些函数可以是用户根据需要编写的自定义函数, 也可以是直接使用系统提供的标准库函数。函数体用一对花括号“ ”和“ ”括起来。任何 一个程序必须有且仅有一个主函数 mai n,程序从主函数开始执行。考核知识点 : 类成员的访问附 1.2.2 (考核知识点解释)在类体内,类的成员函数可以直接访问类中的任何成员。考核知识点 : 类成员的访问控制 附 1.2.3 (考核知识点解释)如果没有给出访问说明符,类默认的访问控制类型是 private 。 考核知识点 : 类成员的访问控制附 1.2.4 (考核知识点解释)在

27、public (公有) 区域内声明的成员是公有成员。公有成员在程序的任何地方都可以 被访问。 一般将公有成员限制在成员函数上, 使其作为类与外界的接口, 程序通过这种函数 来操作该类的对象。在 protected (保护)区域内声明的成员是被保护的成员。被声明为 protected (保护) 访问级别的数据成员或函数成员只能在该类的内部或其派生类类体中使用。考核知识点 : 类成员的访问控制 附 1.2.5 (考核知识点解释)在 private (私有)区域内声明的成员是私有成员。私有成员只能被该类的成员函数或 该类的友元访问。考核知识点 : 构造函数 附 1.2.6 (考核知识点解释)如果在类

28、中声明了多个构造函数, 这就是构造函数的重载。 要求这些构造函数要有不同 的参数表,系统自动调用构造函数时按照函数重载的规则选择其中的一个构造函数。 考核知识点 : 构造函数 附 1.2.7 (考核知识点解释)若在类中定义一个带参构造函数, 则系统不再提供默认的无参构造函数; 若创建对象时 需要调用无参构造函数,就必须在类中定义一个无参构造函数。考核知识点 : 构造函数 附 1.2.8 (考核知识点解释)若在类中定义一个带参构造函数, 则系统不再提供默认的无参构造函数; 若创建对象时 需要调用无参构造函数,就必须在类中定义一个无参构造函数。考核知识点 : 析构函数 附 1.2.9 (考核知识点

29、解释)析构函数无参数,所以不能被重载。 考核知识点 : 静态成员 附 1.2.10 (考核知识点解释)在类的成员前如果加上关键字 static ,这种成员就是类的静态成员。类的静态成员包 括静态数据成员和静态成员函数。 类的静态成员的特点是: 静态成员属于类, 不属于任何对 象。无论有多少对象或没有对象, 静态成员都只有一份存于公用内存中, 被该类的所有对象 共享。考核知识点 : 静态数据成员附 1.2.11 (考核知识点解释)在类中声明的静态数据成员属于引用性说明, 并不实际分配内存。 在创建对象时, 会为 对象的数据成员分配存储空间。 但由于静态数据成员不属于任何对象, 所以在创建对象时也

30、 不会为该类的静态数据成员分配存储空间。 所以,类设计者需要在类外对静态数据成员进行 定义。静态数据成员的定义形式如下::=;考核知识点 : 静态成员函数附 1.2.12 (考核知识点解释)如果成员函数被声明为 static 的,它就是静态成员函数。像静态成员数据一样,静态 成员函数与具体对象无关。 静态成员函数不能访问一般的数据成员, 它只能访问静态数据成 员,也只能调用其他的静态成员函数。考核知识点 : 友元函数附 1.2.13 (考核知识点解释)将普通函数声明为类A的友元函数。声明后,普通函数有权访问类A中的任何成员,包 括私有成员和保护成员。考核知识点 : 友元附 1.2.14 (考核

31、知识点解释)将类A声明为类B的友类。声明后,类A的任何成员函数都有权访问类 B中的任何成员, 包括私有成员和保护成员。考核知识点 : 什么是继承附 1.2.15 (考核知识点解释)在C+中,如果一个类C1通过继承已有类C而创建,则将C1称作派生类(也称做子类), 将C称做基类(也称做父类)。派生类会继承基类中定义的所有属性和方法,另外也能够在 派生类中定义派生类所特有的属性和方法。考核知识点 : 什么是继承附 1.2.16 (考核知识点解释)女口:以形状类为基类,可以派生出各种特定的几何形状,如圆形、四边形、三角形, 它们在具有形状类所定义的属性和行为的同时,还拥有各自的特性。考核知识点 :

32、派生类的构造函数和析构函数附 1.2.17 (考核知识点解释)派生类构造函数的作用主要是对派生类中新添加的数据成员做初始化工作; 在创建派生 类对象、执行派生类构造函数时, 系统会自动调用基类的构造函数来对基类中定义的数据成 员做初始化。 同样,派生类析构函数的作用主要是清除派生类中新添加的数据成员、 释放它 们所占据的系统资源; 在销毁派生类对象、 执行派生类析构函数时, 系统会自动调用基类的 析构函数来释放基类中数据成员所占据的系统资源。当创建派生类对象时, 先调用基类的构造函数, 再调用派生类的构造函数; 析构函数调 用顺序总是与构造函数调用顺序相反。考核知识点 : 多重继承附 1.2.

33、18 (考核知识点解释)如果派生类是基于多个基类创建出来的,则称这个继承关系为多重继承。考核知识点 : 派生类的构造函数和析构函数、多重继承附 1.2.19 (考核知识点解释)当创建派生类对象时,先调用基类的构造函数,再调用派生类的构造函数。在多重继承中, 各基类的构造顺序与派生类定义时基类表中各基类出现的顺序一致。 而 析构函数的调用顺序总是与构造函数调用顺序相反。考核知识点 : 虚函数附 1.2.20 (考核知识点解释)面向对象程序设计语言采用“后期绑定” ,也可叫“动态绑定”技术,即当调用某个对 象的函数时, 应该被执行的程序代码会根据对象的具体类型在执行期被确定下来。 这是实现 多态性

34、的技术保证。想要实现多态,就要进行“后期绑定”,在C+冲,实现“后期绑定”的机制是虚函数。只有将派生类对象赋给基类对象引用或将派生类对象地址赋给基类对象指针时, 才能够 表现出多态性。考核知识点 : 虚函数附 1.2.21 (考核知识点解释)面向对象程序设计语言采用“后期绑定” ,也可叫“动态绑定”技术,即当调用某个对 象的函数时, 应该被执行的程序代码会根据对象的具体类型在执行期被确定下来。 这是实现 多态性的技术保证。想要实现多态,就要进行“后期绑定”,在C+中,实现“后期绑定”的机制是虚函数只有将派生类对象赋给基类对象引用或将派生类对象地址赋给基类对象指针时, 才能够 表现出多态性。考核

35、知识点 : 虚函数的工作方式附 1.2.22 (考核知识点解释)只有将派生类对象赋给基类对象引用或将派生类对象地址赋给基类对象指针时, 才能够 表现出多态性。 如果将派生类对象赋给基类对象, 那么通过基类对象必然是调用基类中的函 数。考核知识点 : 抽象类附 1.2.23 (考核知识点解释)通常将不需要实例化的类定义成“抽象类” 。抽象类不能实例化为对象,它的唯一用途 是为其他类提供合适的基类,其他类可从它这里继承和(或)实现接口。考核知识点 : 抽象类附 1.2.24 (考核知识点解释)一个类如果是抽象类, 则该类中至少有一个成员函数是纯虚函数, 纯虚函数就是在声明 时初始化为 0 的虚函数

36、。抽象类不能实例化为对象, 它的唯一用途是为其他类提供合适的基类, 其他类可从它这 里继承和(或)实现接口。考核知识点 : 抽象类附 1.2.25 (考核知识点解释)如果某个类是从一个带有纯虚函数的类派生出来的, 并且没有在该派生类中提供该纯虚 函数的定义,则该虚函数在派生类中仍然是纯虚函数,因而该派生类也是一个抽象类。 考核知识点 : 成员运算符函数与友元运算符函数的比较 附 1.2.26 (考核知识点解释)双目运算符计算时需要两个操作数, 所以调用运算符重载函数时必须将要计算的两个操 作数传递给函数。 对于成员重载函数, 必须是某个对象调用这个函数, 而且将这个对象的地 址传递给 this

37、 指针,因此调用函数的这个对象就可以作为一个操作数传递给函数,另一个 操作数作为实参传递给形参即可,这样成员重载函数只需要一个参数即可。考核知识点 : 成员运算符函数与友元运算符函数的比较附 1.2.27 (考核知识点解释)使用成员函数重载单目运算符, 不需要参数。 因为只有一个操作数, 而成员函数需要对 象调用,该对象即为操作数传递给函数。使用友元函数重载单目运算符,需要一个参数,操 作数作为实参传递给函数。无论是成员重载还是友元重载, 单目运算符重载时操作数类型必须是该类的对象。 成员 函数是对象调用,这个对象就是操作数。而对于友元函数,参数是操作数,但是参数也要求 必须是该类型的对象,如

38、果是其他类的对象或内部类型将没有意义,系统也不允许。 考核知识点 : 运算符重载的规则 附 1.2.28 (考核知识点解释)C+规定,赋值运算符“=”,下标运算符“”,函数调用运算符“()”,类型转换运算 符“() ”,成员运算符“ -”必须重载为成员函数。而插入运算符“ ” 只能重载为非成员函数(友元函数) 。考核知识点 : 输入/ 输出流类 附 1.2.29 (考核知识点解释)ios 是一个抽象基类,提供一些对流状态、工作方式等设置的功能。 ios 类作为虚基类 派生出 istream 类和 ostream 类。输入流类 istream 提供输入操作功能,输出流类 ostream 提供输出

39、操作功能。 输入 / 输出流类 iostream 是从 istream 类和 ostream 类通过多重继承而 派生的类。 iostream 类将输入、输出功能融合在一起,因此编写程序时一般包含头文件 iostream 以实现输入 /输出操作, 因为在该头文件中含有对输入 /输出流类的定义及输入 / 输 出操作的相关信息。 streambuf 类和其他类没有继承关系,该类提供缓冲输入 / 输出的支持。 考核知识点 : 文件的随机读 / 写 附 1.2.30 (考核知识点解释)seekg() 函数和 seekp() 函数分别用于定位输入文件和输出文件的文件指针。它们的原 型为:isream& s

40、eekg(long offset,seek_dir origin=ios:beg);osream& seekp(long offset,seek_dir origin=ios:beg);seekg() 函数的功能是将输入文件的文件指针从参照位置 origin 开始移动 offset 个字 节,定位到新的位置。 seekp() 函数的功能是将输出文件的文件指针从参照位置 origin 开始 移动 offset 个字节,定位到新的位置。其中,参数 offset 是长整型,表示文件指针相对参照位置偏移的字节数。参数 origin 则为参照位置, seek_dir 是系统定义的枚举类型,有以下 3 个

41、枚举常量:ios:beg 文件首ios:cur 文件当前位置ios:end 文件尾origin 可以有以上 3 个取值,默认参数值为 ios:beg 。、主观部分: (一)、程序题1、写出下面程序的运行结果 #include using namespace std;#define size 5void get(int &n,int i)n=i;void print(int *n)for(int i=0;isize;i+) coutni ;coutendl;int main()int asize;for(int i=0;isize;i+) get(ai,i);print(a);for(int i

42、=0;isize;i+)get(asize-i-1,i); print(a);return 0;2、写出下面程序的运行结果#include using namespace std; int nArray = 1, 2, 3, 4, 5; int& Index(int nI)return nArraynI;int main()int nI;for (nI = 0; nI 5; nI+) coutnArraynI ;coutendl;Index(1) = 9; for (nI = 0; nI 5; nI+) coutnArraynI ;return 0;3、写出下面程序的运行结果。#include

43、 using namespace std;class Sampleint x,y;public:Sample()x=y=0;Sample(int a,int b)x=a;y=b; void disp()coutx=x,y=yendl;int main()Sample s1, s2(2,3);s1.disp();s2.disp();return 0;4、写出下面程序的运行结果。#includeusing namespace std;class Sampleint A;static int B;public:Sample(int a)A=a,B+=a;static void func(Sample

44、 s);void Sample:func(Sample s)coutA=s.A,B=Bendl;int Sample:B=0;int main()Sample s1(2),s2(5);Sample:func(s1);Sample:func(s2); return 0;5、写出下面程序的运行结果。 #include using namespace std;class Base public:void Who( )coutclass Baseendl; ;class Derived1:public Base public:void Who( )coutclass Derived1endl; ;cl

45、ass Derived2:public Base public:void Who( )coutclass Derived2Who();p=&obj2; p-Who();p=&obj3; p-Who(); obj2.Who(); obj3.Who(); return 0;6、写出下面程序的运行结果#include using namespace std; class Shapepublic:void Draw() coutShapeendl; virtual void Print()=0;class Circle:public Shapeprivate: double r;public: voi

46、d Draw() coutCircleendl;void SetData(double radius) r=radius; void Print() coutarea:3.14*r*rendl; ;class Rectangle:public Shapeprivate: double a,b;public: void Draw() coutRectangleendl; void SetData(double x,double y) a=x,b=y; void Print() coutarea:a*bDraw(); c.Print(); sp2.Draw(); r.Print(); return

47、 0;7、写出下面程序的运行结果。#include using namespace std;class Sample;Sample operator-(Sample &,Sample &);Sample operator+(Sample &,Sample &); class Samplepublic:Sample()Sample(int i)n=i;friend Sample operator-(Sample &,Sample &); friend Sample operator+(Sample &,Sample &); void disp()coutn=nendl;private:int n

48、;Sample operator-(Sample &s1,Sample &s2)int m=s1.n-s2.n;return Sample(m);Sample operator+(Sample &s1,Sample &s2)int m=s1.n+s2.n;return Sample(m);int main( )Sample s1(10),s2(20),s3;s3=s2-s1;s3.disp();s3=s2+s1;s3.disp();return 0;8、写出下面程序的运行结果 #include using namespace std;class Samplepublic:Sample(int

49、i)n=i; void operator+()n+; void operator+(int)n+=2;void disp() coutn=nendl;private:int n;int main()Sample A(2),B(2);A+;+B;A.disp();B.disp();return 0;9、写出下面程序的运行结果#include #include using namespace std;int main()ofstream file1; file1.open(f1.dat); file1123endl; file1ij; couti+j=i+jendl; file2.close();

50、return 0;10、写出下面程序的运行结果#in elude using n amespace std; template class addT x, y;public:add(T a, T b)x=a; y=b;T add1() return x+y; ;int mai n()add A(65, 120);add B(13.6, 22.9); couts1=A.add1()e ndl; couts2=B.add1()e ndl; return 0;11、swap()函数利用引用作为参数实现两个变量的交换,将程序填写完整#in clude using n amespace std;void

51、 swap( int &x. int &v )int temp;temp=x;x=y;y=temp;int mai n()int a,b;cin ab;swap(a, b);couta be ndl;return 0;12、下面的程序定义了两个类,一个是 TennisClub,其成员数据有俱乐部和会员名,另一个 是Person,其成员数据有姓名和年龄,类 TennisClub的成员函数visit可以显示姓名、年龄、 俱乐部名、会员名。将程序填写完整。#in elude #in elude using n amespaee std;class Person;class Tenni sClubpu

52、blic:Tenni sClub(char *p,char *q)strcpy(club,p);strcpy (n ame,q);void visit(Pers on);private:char club24;char n ame24;class Pers onpublic:Pers on( char *p,i nt y)strcpy( name,p);age=y;frie nd void Tenn isClub:visit(Pers on x):private:char n ame24;int age;void Tenn isClub:visit(Pers on x)cout姓名:endl;cout年龄:x.ageendl;cout可以使用的俱乐部:clube ndl;cout介绍人:nameendl;int mai n()TennisClub a(明星俱乐部,李晓明);Person b(张静,28);a

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论