面向对象程序设计总复习资料_第1页
面向对象程序设计总复习资料_第2页
面向对象程序设计总复习资料_第3页
面向对象程序设计总复习资料_第4页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

1、面向对象程序设计总复习(2018_ 夏)复习之一、对照书本 ( 或上课课件 ) 上,搞懂有关概念【第 0-1章】1.面向对象程序设计是不同于传统程序设计的一种新的程序设计范型。它对降低软件的复杂性,改善其重用性和维护性,提高软件的生产效率,有着十分重要的意义。因此面向对象的程序设计被认为是 程序设计方法学的一场实质性的革命( 在导学中 ) 。2. 面向对象( O-O )程序设计是一种新的程序设计范型。这种范型的主要特征是:程序=对象+消息面向对象程序的主要结构 特点 是:第一,程序一般由类的定义和类的使用两部分组成;第二,程序中的一切操作都是通过向对象发送消息来实现的,对象接收到后,启动有关方

2、法完成相应操作。3.现实世界中,对象一般可以表示为:属性 + 行为现实世界中的对象,具有以下特性:(1) 每一个必须有一个名字以区别于其他对象;(2) 用属性来描述对象的某些特征;(3) 有一组操作,每组操作决定对象的一种行为;(4) 对象的行为可以分为两类:一类是作用于自身的行为,另一类是作用于其他对象的行为。4.在现实世界中,类是一组具有相同属性和行为的对象的抽象 。类与对象的关系是抽象和具体的关系。在 C+ 面向对象的程序设计中,把类中的属性称为数据(数据成员),类中的操作是用函数(函数成员)来实现的。5.面向对象程序设计的基本特征:抽象性、封装性、继承性和多态性(1).抽象 是通过特定

3、的实例(对象)抽取共同性质后形成概念的过程。(2).在面向对象程序设计中,封装 是指把数据和实现操作的代码集中起来放在对象内部,并尽可能隐蔽对象的内部细节。(3).继承 机制允许派生类继承基类的数据和操作( 即数据成员和成员函数) ,也就是说,允许派生类使用基类的数据和操作。同时派生类还可以增加新的操作和数据。从继承源上分,继承分为 单继承和多继承 。(4). 面向对象系统的 多态性 是指不同的对象收到相同的消息时产生多种不同的行为方式。如可以有同名函数【第2章】6. 简单的 C+ 程序例 2.1 计算两个整数之和 sum.cpp#include <iostream> /系统头文件

4、这两行也可用一行代替: #includeusing namespace std。int main( )/主函数1/21 int x,y, sum。/定义三个整型变量cout<<"输入二个数 :"<<'n'。/界面 : 提示用户输入二个数cin>>x。/从键盘输入变量x 的值cin>>y。/从键盘输入变量y 的值sum=x+y。cout<<“ x+y="<<sum<<'n'。/输出return 0。C+新行 ( 回车换行 )n 或 endl(ENDL的

5、小写 )新的输入 / 输出:老: scanf新: cin是标准输入流,在程序中用于代表标准输入设备,即键盘。运算符“>>”表示向右老: printf新: cout是标准输出流,在程序中用于代表标准输出设备,即屏幕。运算符“<<” 表示向左使用 cin或 cout进行 I/O操作时,在程序头中头文件#include <iostream.h>7. 函数原型(函数声明) ( 重点 )返回值类型函数名(参数表);例 2.7intadd(int a, int b)。intadd(int,int)。使用在前,定义在后,要先声明。若定义在前,使用在后,就可不必声明。8.

6、函数重载: C+ 中,只要函数的參数的类型不同,或者參数个数不同,或者二兼有之,几个函数可以用相同的函数名。称为 函数重载9 C 语言用函数malloc()和 free()动态分配内存和释放动态分配的内存。C+使用运算符new和 delete能更好、更简单地进行内存的分配和释放 。10.引用( 重点)引用可为变量起别名,它主要用作函数参数以及函数的返回类型。引用有三种:(1 )有变量的引用、( 2 )参数引用和(3 )返回值引用。11 1 、 &取地址运算符取西瓜皮2 、 *指针运算符(间接访问运算符)挖西瓜馕【第3章】12. C+ 中说明( 类的定义 )类的一般形式为clsaa类名

7、private: (可省略 )私有段数据成员和成员函数protected:保护段数据成员和成员函数public:公有段数据成员和成员函数2/21。成员函数 的定义方式:第一种方式是在类定义中只给出成员函数的原形,而成员函数体在类的外部定义。第二种方式是将成员函数定义在类的内部,即定义为内置函数。(1) 隐式定义(2) 显式定义13 类 对象中成员的引用(使用、访问都是同一个意思)不论是数据成员,还是成员函数,只要是公有的,就可以被外部函数直接引用,引用的一般格式是:对象名 . 数据成员名和对象名. 成员函数名(实参表)外部函数不能引用对象的私有成员总之: 类成员的访问属性:类的公有成员不但可以

8、被类中成员函数访问,还可以在类的外部通过类的对象进行访问。类的私有成员只能被类中成员函数访问,不能在类的外部通过类的对象进行访问。14. 构造函数的特点:( 1 )构造函数的名字必须与类名相同,否则编译程序将把它当作一般的成员函数来处理。( 2 )构造函数没有返回值 ,在声明和定义构造函数时,是不能说明它的类型的的,甚至说明为void类型也不行。( 3)构造函数 也是成员函数 ,与普通的成员函数一样,构造函数的函数体可写在类体内,也可写在类体外 。( 4)一般不提倡在构造函数中加入与初始化无关的内容( 5)构造函数一般声明为公有成员。它不需要用户来调用,而是在建立对象时自动执行 的。( 6 )

9、在实际应用中,通常需要给每个类定义构造函数。如果没有给类定义构造函数,则编译系统自动地生成一个缺省的构造函数。complex:complex( ) /不能带任何参数。( 7 )定义构造函数时,也可以是不带参数的。15. C+ 允许 重载构造函数 ,这些构造函数之间名字相同,而以它们所带参数的个类或类型的不同而区分。 带默认参数的构造函数 。16 对象的赋值和拷贝构造函数,其作用是,在建立新对象时,使用一个已经存在的对象去初始化这个新对象。piont p2(p1)。17. 析构函数也是 特殊成员函数 ,用于释放对象。( 1 ) 析构函数与构造函数名字相同,但它前面必须加一个波浪号( )。( 2

10、) 析构函数没有参数,也没有返回值,而且不能重载,因此在一个类中只能有一个析构函数。( 3 ) 当撤消对象时,编译系统会自动地调用析构函数。18 可以用类定义对象数组 :类名数组名 元素个数 ;19 当需要时,可以用类定义 对象指针 。对象指针就是用于存放对象地址的变量类名 * 对象指针名。20. 类的封装性,使类只能通过成员函数来访问私有成员。这是好事但也有一定的限制太死的感觉。能否开个小孔口,必要时作个破例,使外界函数、别的类的个别成员函数、甚致别的类的所有3/21成员函数可访问某个类的私有成员。这个方法称为友元。21. 友元包括 友元函数 和友元类(1) 友元函数分为: 非成员函数 作友

11、元和 别的类的成员函数 作友元(2)友元类:在类定义时,在类内说明一个类( 该类前面已定义) ,前加上friend表示该 整个的一个类是本类的友元类。友元类的所有成员函数可以访问它自己类私有成员又可本类的私有成员。【第 4章】22. 派生类的定义基类:class基类名类的内容 。声明派生类:class派生类名: 继承方式基类名/ 派生类新增的数据成员和函数成员 。继承方式可为公有继承( 用 public)、私有继承 ( 用 private或缺省 ) 和保护继承 ( 用 protected)23. 基类成员在派生类中的访问属性( 重点 )基类中的成员在公有派生类中的访问属性在私有派生类中的访问属

12、性在保护派生类中的访问属性私有成员不可直接访问不可直接访问不可直接访问公有成员公有私有保护保护成员保护私有保护24. 派生类对基类成员的访问规则 ( 重点 )(1) 私有继承的访问规则基类中的成员私有成员公有成员保护成员访问方式内部访问不可访问可访问可访问对象访问不可访问不可访问不可访问(2) 公有继承的访问规则基类中的成员私有成员公有成员保护成员访问方式内部访问不可访问可访问可访问对象访问不可访问可访问不可访问(3) 保护继承的访问规则基类中的成员私有成员公有成员保护成员访问方式内部访问不可访问可访问可访问对象访问不可访问不可访问不可访问25. 派生类的构造函数和析构函数(1) 派生类的构造

13、函数和析构函数执行顺序无论何中派生,当创建派生类对象时,首先执行基类的构造函数,随后再执行派生类的构造函数;4/21当撤消派生类对象时,则先执行派生类的析构函数,随后再执行基类的析构函数。(2).派生类的构造函数和析构函数的构造规则简单的 派生类的构造函数一般格式为:派生类名 ( 参数总表 ): 基类名 ( 参数表 )派生类新增成员的初始化语句其中基类构造函数参数,来源于派生类的构造函数的参数总表,也可以用常数值。26. 从多个类,派生出一个类,也即一个类从多个基类继承称为多重继承 。多重继承的声明格式如下:class派生类名 : 继承方式1基类名 1, . ,继承方式 n基类名 n派生类新增

14、的数据成员和成员函数 。派生类继承了基类 1 到基类 n 的所有数据成员和函数成员,其访问属性规则与单继承情况一样,多继承 可看成单一继承的扩展 。27. 如果 一个派生 类有 多个直接基类 ,而 这些直接基类 又有 一个相同的基类 ,则在最低层的派生类中会保留这个间接的共同基类数据成员的多份同名成员。在访问这些同名成员时会产生二义性,才考虑虚基类,虚基类在派生类中声明的形式:class派生类名:virtual继承方式基类名 / . 。经过这样的声明后,当基类通过多条派生路径被一个派生类继承时,该派生类只继承该基类一次,也就是说,基类成员无“副本 ”【第5章】28. 编译时的多态性与运行时的多

15、态性静态联编 (前期联编)静态联编要求在程序编译时就知道调用哪个函数,就决定如何实现某一动作。动态联编 (后期联编、滞后联编)一直要到程序运行时才能确定调用哪个函数。系统在运行时才动态完成的联编。静态联编支持的多态性称为编译时多态性,也称静态多态性 。在C+中,编译时多态性是通过函数重载和运算符重载实现的。动态联编支持的多态性称为运行时多态性,也称动态多态性 。在C+中,运行时多态性是通过继承和虚函数来实现的。29 运算符重载:C+除了可以对函数重载外,还可以对大多数运算符实施重载。外部普通函数类的友元函数 是类的成员函数成员运算符函数定义的语法形式成员运算符函数的原型在类的内部声明格式为:c

16、lass X/.返回类型operator运算符 ( 形参表 ) ;5/21/. 。30.虚函数的引入,基类的指针 可以指向它的公有派生类的对象,用“指针 ”才有虚函数 的问题。引入派生类后,由于派生类是由基类派生出来的,因此指向基类的指针和指向派生类的指针是相关的:( 1 )基类的指针可以指向它的公有派生类的对象。但不允许指向它的私有派生类的对象。( 2 )派生类的指针不允许指向它的基类的对象。( 3 )基类的指针指向它的公有派生类的对象时,只能用它来直接访问派生类中从基类继承来的成员,而不能直接访问公有派生类中定义的新成员。31 有时在程序设计时,使用对象指针的目的是为了动态和灵活,即当指针

17、指向不同对象(基类对象或派生类对象)时,能分别调用不同类的成员函数。如果将函数说明为虚函数,就能实现这种动态调用的功能。虚函数的定义是在基类中进行的:virtual函数类型函数名 ( 形参表 )函数体32 纯虚函数 的一般形式如下:virtual函数类型函数名( 参数表 )=0;如果一个类至少有一个纯虚函数, 那么就称该类为抽象类【第6章】33. 模板的概念模板是 C+ 语言的一个重要特性。模板是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数,从而实现了代码重用,使得一段程序可以用于处理多种不同类型的对象,大幅度地提高程序设计的效率。34 函数模板和类模板( 1 ) .

18、函数模板与模板函数所谓函数模板,就是写一个函数模子,用这个模子套印出许多功能相同,参数类型和返回类型不同的函数。模板函数:函数模板实例化后的具体函数。( 2 )类模板和模板类 类模板 ( 也称为类属类或类生成类 ) 是:允许用户为类定义一种模子,使得类中的某些数据成员,某些成员函数的参数或者返回值,能取任意数据类型【第7章】35 C+流概念: cin >>对象。cout<<对象。整型、实型、字符、字符串等有格式 的输入输出36.文件的输入输出:在含有文件操作的程序中,必须有如下的预处理命令:# include<fstream.h>open、 close函数文

19、本文件、二进制文件读写。6/21复习思考题、即考试的A、 B、C、 D 选择题和填空题一、分清下面的概念,那些是正确的,那些是错误的1. 面向对象程序的主要结构特点之一程序一般由类的定义和类的使用两部分组成。程序中的一切操作都是通过向对象发送消息来实现的。 ×程序中的一切操作都是通过调用函数来实现的。×程序一般由函数定义和函数的使用两部分组成。×程序一般由变量的定义和变量的使用两部分组成。×程序一般由对象的定义和对象的使用两部分组成。 ×程序中的一切操作都是通过定义函数来实现的。 ×程序中的一切操作都是通过定义类来实现的。2 对象是现

20、实世界中的一个实体,其特性每个对象必须有一个名字,以示区别。 有属性描述。 有一组操作。 创建对象时会自动调用构造函数。 ×必须有一个关键字。 ×一定要自定义一个构造函数。 ×要有二个以上数据。3 面向对象系统的特性是抽象性 封装性继承性多态性×完整性×唯一性×二义性×安全性4 类的概念是对一组具有共同的属性特征和行为特征的对象的抽象。同一类数据的集合。×类即是对象数组。 ×各种对象的集合。 ×同一记录的集合。 ×同类函数的集合。 ×现实世界中所有对象的集合。5 类和对象之间

21、的关系是抽象和具体的关系。 类型和变量之间的关系。 结构类型和结构体的关系。 ×定义和被定义的关系。 ×调用和被调用的关系。 ×类即是对象数组。 ×型和值的关系。 ×指针和所指的对象的关系。6构造函数的特征构造函数的函数名与类名完全相同。构造函数可以有形式参数。构造函数可以重载。在创建对象时被执行。×在程序编译时被执行。 ×在创建类时被执行。×在程序装入内存时被执行。 ×构造函数必须说明返回类型。×程序中要有调用构造函数的语句。7析构函数的特征一个类中只能定义一个析构函数。析构函数名与类名相同并

22、加 。 系统会自动调用析构函数。 ×析构函数的定义只能在类体内。×析构函数可以有多个参数。×一个类中能定义多个析构函数。8关于成员函数特征的下述描述成员函数可以重载。成员函数可以设置参数的缺省值。成员函数可以是静态的。类定义中只给出成员函数的原型,而成员函数在类外定义。类定义中只给出成员函数的原型,而成员函数在类外定义并在之前加inline。 可在类内定义。 ×成员函数一定要在类内定义。×成员函数一定是内置函数。9 下列的各种函数中,是本类的成员函数构造函数 析构函数拷贝构造函数缺省参数的构造函数×友元函数×主函数×

23、;普通函数×标准函数7/2110. 在友元函数的下面说法中,正确的是:友元函数是独立于当前类的外部函数。×一个友元函数不能同时定义为两个类的友元函数×友元函数必须在类的外部定义。×在外部定义友元函数时,必须加friend11 友元的作用是什么,一个类的友元可以访问该类的什么提高程序的运行效率。×加强类的封装性。×实现数据的隐藏性。×增加成员函数的种类所有成员 ×只能是私有成员×只能是公有成员×成员函数12 对基类和派生类的关系描述中派生类 ( 如公共汽车 ) 是基类 ( 汽车 ) 的子集。 派生

24、类是基类定义的扩延。无论哪种派生,基类的私有成员不允许派生类的成员函数访问。无论哪种派生,基类的公有成员允许派生类的成员函数访问。无论哪种派生,基类的保护成员允许派生类的成员函数访问。×派生类是基类的具体化。 ×派生类是基类的组合。 ×无论哪种派生,基类的保护成员不允许派生类的成员函数访问。13 派生类的对象对它的基类成员中,可以访问的是公有继承的公有成员。 ×公有继承的保护成员。 ×公有继承的私有成员。 ×公有继承的所有成员。 ×私有继承的公有成员。 ×私有继承的私有成员。 ×私有继承的所有成员。 &#

25、215;私有继承的保护成员。14. 对虚基类正确的论述 定义派生类时,在基类名前加virtual。 ×定义基类时加virtual 。 ×成员函数前加virtual。 ×在派生类名前加virtual。15一个派生类有多个父类,而这多个父类又有一个共同基类,这种情况,才考虑设置虚基类,其目的是:消除二义性。 简化程序。提高运行效率。减少目标代码。16 C+中函数可以重载:(P31 )只要函数参数的类型不同,或者参数的个数不同, 或者二者兼有之,两个以上函数可以同名。17不可重载的函数的是:析构函数。(可以:)普通的成员函数。友元函数。外部函数。18 可定义作运算符重载

26、函数的是成员函数。 友元函数。 类以外的函数。 ×析构函数。 ×无返回值的函数。 ×构造函数。19 不能重载运算符: ? :&& new+( )delete20 关于动态联编的描述,动态联编称为运行时的多态性是通过什么来实现的。动态联编是以虚函数为基础的。动态联编是在运行时确定所调用的函数的。动态联编调用的函数,是用基类对象的指针或对象引用所指的函数。继承和虚函数。动态联编是在编译时确定操作函数的。函数重载和运算符重载。运算符重载。函数重载。21 说白了,通过基类指针 或引用来访问基类和派生类中的同名函数,才考虑虚函数。其描述:虚函数是在基类中用v

27、irtual说明,派生类中重新定义的函数。×虚函数是一个static类型的成员函数。 ×虚函数是一个非成员函数。 ×派生类的虚函数与基类的虚函数具有不同的参数个数和类型。22 抽象类论述:8/21如果一个类至少有一个纯虚函数,那么该类为抽象类。抽象类只能用作其他类的基类,不能建立抽象类对象。抽象类可以用来定义指针。×抽象类可以作为某个函数的返回类型。23 进行文件操作时需要包含的文件,C+用 cout和cin进行输出 / 输入操作时需要包含文件。fstream.hiostream.hstdio.hstdlib.hstring.hmath.h24. 面向对

28、象程序设计是不同于传统程序设计的一种新的程序设计范型。面向对象的程序设计被认为是程序设计方法学的一场 实质性的革命 ( 在导学中 ) 。25. 面向对象( O-O )程序设计是一种新的程序设计范型。这种范型的主要特征是:程序=对象+消息26.现实世界中,对象一般可以表示为:属性 + 行为27 在定义类时,第一个保留字。( class)28 将数据结构和作用于数据结构上的操作组成一个实体,数据的表示方式和对数据的操作细节被隐藏起来,这是面向对象程序设计的(封装性) 。而函数重载是 (多态性) 。29 C+中类的定义内部,英文 private段 , protected段, public段(私有段保

29、护段 公有段 )30.定义了类 A ,在主函数中如出现: A*p, obj, ob10。 的语句。 (则 p 是对象指针、obj是对象、 ob 是对象数组。)31 C+的运算符: <<>> newdelete( 输入输出申请释放 )32 在 C+ 定义的类中,成员可分为二类,有三个段。(数据 成员函数 成员 私有 公有保护)33 在一个类定义中,可以声明友元,友元可以是三种友元。(友元函数友元成员友元类)34 C+中,函数说明为void fun(int &i)的引用叫, ( 参数引用 ),函数说明为 void&fun(int i)的引用叫。 (返回值引用

30、)35 继承机制允许派生类继承基类的什么,( 数据和操作) 同时,派生类还可以增加新的什么。( 数据和操作 )36类外的函数作运算符重载时,只能访问类的( 公有 ) 成员,而用类的友元运算符函数或成员运算符函数重载可以访问类的(所有) 成员。37一个类模板允许用户为类定义什么?(一个模式 ( 子 ))使得类中的某些数据成员、某些成员函数的参数或返回值,能取什么类型?(任意数据类型)38.模板是实现代码重用机制的一种工具,函数模板的实例化、类模板的实例化分别称为(模板函数 、模板类)复习之二、阅读程序写运行结果、程序填空(把这些程序真正读懂,不要背答案!)1. 函数、函数调用、函数原型(包括参数

31、引用、返回值的引用)2. 类的定义和定义对象 ( 包括对象指针 )3. 派生和继承的应用4. 派生类的构造函数和析构函数执行顺序5 函数重载和运算符重载9/21复习思考题1.#include <iostream.h>int add(int , int )。int main() int x, y, sum。cout<<” 输入二个整数: ”。cin>>x>>y。sum=add(x,y)。cout<<”x+y=”<<sum<<endl。return 0。int add(int a, int b) int c。c=a

32、+b。return c。答案:输入二个整数:10 20x+y=302.#include <iostream.h>void fun1(int i)i += 5。void fun2(int &i)i += 15。void main( ) int k=10。fun1(k)。cout<<"k="<<k。fun2(k)。cout<<"k="<<k<<endl。答案: k=5k=153 #include <iostream.h>int &f(int &i) i

33、+=10。10/21return i。int main( ) int k=0。int &m=f(k)。cout<<k<<,。m=20。cout<<k<<endl。return 0。答案:10, 204 #include <iostream.h>class Point public:Point( int x1=0, int y1=0) x=x1。 y=y1。void print()。private:int x, y。 。void Point:print() cout<<"x="<<x&

34、lt;<" y="<<y<<endl。void print(Point p) p.print()。void main()Point p1(10,20),p2(30),p3,*p。p=&p1。p->print()。p2.print()。print(p3)。答案: x=10 y=20x=30 y=0x=0y=05 #include <iostream.h>11/21class Point public:Point( int x1=0, int y1=0) x=x1。 y=y1。 d=x*x+y*y。void print()

35、cout<<"x="<<x<<" y="<<y<<” dist=” <<d<<endl。private:int x, y, d。 。void main()Point p1(1),p2(2,3),*p。p=&p1。p->print()。p2.print()。答案: x=1 y=0 dist=1x=2 y=3 dist=136 #include <iostream.h>class Base public:Base(int n)cout <<

36、; "现在进入Base基类的构造函数n"。i=n。Base( ) cout <<"现在进入Base基类的析构函数n"。 void showi( ) cout << i << endl。 private:int i。 。class Derive:publicBase public :Derive(int n, int m):Base(m)cout << "现在进入Derive派生类的构造函数n"。j=n。Derive( )cout <<"现在进入Derive派生类的析

37、构函数“ <<endl。 12/21void showj( ) cout << j << endl。 private:int j。 。voidmain( )Derive obj(30,40)。obj.showi( )。obj.showj( )。答案:现在进入Base基类的构造函数现在进入Derive派生类的析构函数4030现在进入Derive派生类的析构函数现在进入Base基类的析构函数7.#include <iostream.h>class Time char a9。public:Time(int s=0, int m=0, int h=0)

38、hours=h。minutes=m。seconds=s。void show() cout<<"时间:"<<hours<<":"<<minutes<<":"<<seconds<<endl。friend Time operator +(Time t1, Time t2)。private:int hours。int minutes。int seconds。 。Time operator +(Time t1, Time t2) Time temp。temp.h

39、ours=t1.hours+t2.hours。temp.minutes=t1.minutes+t2.minutes。temp.seconds=t1.seconds+t2.seconds。if(temp.seconds>60)13/21。temp.seconds=temp.seconds-60。temp.minutes+。if(temp.minutes>60)temp.minutes=temp.minutes-60。temp.hours+。if(temp.hours>=24) temp.hours=temp.hours-24。return temp。void main()Tim

40、e T, T1(20,23,21), T2(10,25,15), T3(5,10,15)。T=T1+T2T.show()T=T+T3T.show()答案:时间 : 12:48:30时间 : 3:58:358.#include <iostream.h>#include <string.h>class Strpublic:Str( char *pi ) p=new charstrlen(pi)+1。strcpy(p,pi)。void show() cout<<"字符串 : "<<p<<endl。void operato

41、r +()。private:char *p。 。void Str:operator +() Str temp("0")。temp.p=new char2*strlen(this->p)+1。strcpy(temp.p,this->p)。strcat(temp.p,this->p)。this->p=new char2*strlen(this->p)+1。14/21strcpy(this->p,temp.p)。void main()Str T1("ABCDXYZ")。+T1。T1.show()。答案:字符串:ABCDXYZ

42、ABCDXYZ9.下面的程序定义一个类 samp ,有三类数据成员和一个构造函数和一个函数成员,填充程序缺少部分,使其变成完整的 C+ 程序。#include <iostream.h>class Sampprotected:int b。 .public:int c。(1)(int n, int m )/构造函数 a=n。(2)。 c=a+b。int(3)(int i)/成员函数 if (i=1) return a。else if(i=2) return b。else return 0。private:int a。 。void main ( ) Samp obj(20,30)。cou

43、t <<(4)<< endlcout << obj.getab(2) << endlcout <<(5)<< endl答案: . Samp . b=m。 / 输出 20。 / 输出 30。 / 输出 50。 . getab. obj.getab(1) . obj.c10.下面的程序定义一个类samp,有三类数据成员和一个构造函数和一个函数成员,填15/21充程序缺少部分,使其变成完整的C+程序。#include <iostream.h>class (1)public:int c。(2) (int n, int

44、m )/构造函数名 a=n。 b=m。 c=a+b。int (3)(char ch)/成员函数名switch(ch) case 'a': return a。 break。case 'b': return b。 break。default : return 0。private:int a,b。 。void main ( ) Myclass(4)(20,30)。 /定义对象cout << obj.get('a') << endl。/输出 20cout << obj.get('b') <<

45、 endl。/输出 30cout <<(5)<< endl。/输出 50答案: . Myclass . Myclass . get . obj . obj.c11.定义一个基类长方形 Base ,私有段有长 a 和宽 b ,公有段有构造函数,能显示长方形面积等。定义以该长方形为底面积的派生类长方体Cuboid,有高 h ,有构造函数,能显示长方体体积。在主函数中定义长方体对象,其长、宽、高分别为10 ,20 ,5 ,显示出长方体体积和长方形底面积。#include <iostream.h>class Base /定义长方形public:Base (float

46、 a1=0, float b1=0)(1)/公有段构造函数体void area ( )/函数 area ( )显示长方形面积 cout<< "长方形面积是:"<< a*b <<endl。float getr() return a*b。 16/21private:.float a,b。 。class Cuboid : public Base /定义以该长方形为底的派生类长方体public:Cuboid (float a1, float b1, float h1 ) :(2)/构造函数h=h1。void (3)( )/显示长方体体积的函数 c

47、out << "长方体体积是:"<<h*getr()<<endl。 private:float h。 。void main( )(4)ob(10,20,5)。/这里定义对象 ob(5)。/这里输出长方形面积ob.body()。/这里输出长方体体积答案: . a=a1。 b=b1 。 . Base(a1,b1) . body . Cuboid . ob.area()12.Base ,私有段有 a 和宽 b ,公有段有构造函数,能显示长方形定义一个基类长方形面积等。定义以该长方形为底面积的派生类长方体Cuboid ,有高 h ,有构造函数,能

48、显示长方体体积。在主函数中定义长方体对象,其长、宽、高分别为10 ,20 ,5 ,显示出长方体体积和长方形底面积。#include <iostream.h>class Base /public:Base (float a1=0, float b1=0) a=a1。b=b1。定义长方形/ 公有段构造函数体void area ( )/函数 area ( )输出显示长方形面积 cout<< "长方形面积是:"<< (1)<<endl。float getr() return a*b。 /函数 getr( )计算长方形面积private:float a,b。 。class Cuboid : public Base /定义以该长方形为底的派生类长方体public:Cuboid (float a1, float b1, float h1 ) :(2) /构造函数h=h1。void body( )/输出显示长方体体积的函数 cout << "长方体体积是:"<<h

温馨提示

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

最新文档

评论

0/150

提交评论