《教学课件第3章面向对象编程》由会员分享,可在线阅读,更多相关《教学课件第3章面向对象编程(109页珍藏版)》请在金锄头文库上搜索。
1、电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社第3章面向对象编程学习目标本章要点上机练习习题电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社学习目标面向对象的程序设计(Object-OrientedProgramming,简称为OOP)以分析真实世界为出发点,较其他设计概念更接近人类直觉观点。封装性、继承性和多态性是OOP的3个特点,本章将针对这3个特点来学习面向对象编程,使读者掌握类、对象、继承、虚函数等基本概念,为后面内容的学习打下基础。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社本章要点面向对象编程的特点类与对象的概念类的
2、封装性类的继承性类的多态性电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社VisualC+面向对象的特点我们通常认为VisualC+就是面向对象的程序设计语言,其实,VisualC+是C/C+语言加上支持面向对象概念机制而形成的面向对象的程序语言。因此,VisualC+不是一个纯粹的面向对象的语言,现在流行的另一种语言JAVA才是一个纯面向对象的语言。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社VisualC+面向对象的特点树立了对象的思想后,才能将其运用到编程当中。面向对象的程序设计的本质在于用面向对象的概念寻找、分析现实世界中对象与对象的关系,然
3、后运用程序语言模拟这些现实世界的对象,最后完成电脑系统的构建。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社VisualC+面向对象的特点面向对象的程序设计有3个基本特点:封装性继承性多态性电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社封装性一个面向对象的程序语言必须提供一种能够把与对象相关的所有信息封装到对象自身中的机制,即封装性。封装机制允许把一个对象中的各个独立的元素变量和函数定义看成一个整体,而无需考虑对象内部的具体结构。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社继承性程序语言必须提供一种方法,让程序可以使用对象的定
4、义来创建一个新的对象,即继承性。继承性提高了软件的再利用率。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社多态性程序语言必须提供一种方法,以便可以修改新对象的行为,使它从已经存在的对象中派生,即多态性。多态性是指一个对象既可以继承父辈的特点,也有它自己的属性和方法,甚至还可以修改从父辈继承的行为。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社类与对象类与对象的含义*this指针电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社类与对象的含义类与对象是VisualC+语言中两个重要的概念。类对象电脑基础实例上机系列丛书Visual C
5、+程序设计教程清华大学出版社类类可以被看成是对对象的特性的描述。C+语言中提供了类这种工具使得应用中的实体(对象)在程序中可以直接被表示为一个标识符,并且可以对它进行引用等操作。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社类因此,我们可以把类看成是建立对象的模型,当在程序中建立一个对象时,就必须以类中的特性描述作为模型来产生一个对象,而这个对象具有这个类的属性与方法。某一对象只有一个类,但一个类的对象可以有好几个,就像一个模子可以做出很多相同属性的零件一样。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社类类用来确定一类对象的行为,而这些行为是通过类
6、的内部数据结构和相关的操作来确定的。类和对象的关系就是抽象和具体的关系。类中应该包含对类的静态属性的描述被称为数据成员变量来描述;以及动态属性的描述由称为成员函数的函数来描述。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社类的声明类的声明格式一般分为说明部分和实现部分。说明部分是用来说明该类中的成员,包含数据成员的说明和成员函数的说明;实现部分是对成员函数的定义。简单地说,说明部分将告诉使用者“做什么”,而实现部分是告诉使用者“怎么做”。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社类的声明类的声明以关键字class开始,后面跟随类的名字。类的声明的
7、一般形式如下:class类名称类名称 /关键字,类名称是一种标关键字,类名称是一种标识符。识符。public:数据成员或成员函数的说明;数据成员或成员函数的说明;电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社类的声明private:数据成员或成员函数的说明;数据成员或成员函数的说明;protected:数据成员或成员函数的说明;数据成员或成员函数的说明;电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社类的声明其中各部分的含义如下:class是定义类的关键字,类名称是一个标识符,一般第一个字母大写,如Dog、Cat、Chair等。大括号内是类的说明部分,
8、说明该类的数据成员或成员函数,末尾的分号不能缺省。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社类的声明关键字private、protected、public表示类中数据成员和函数的访问级别。关键字public、private和protected在类体内出现的先后顺序无关,并且允许多次出现,用它们来说明类成员的访问权限。缺省的访问权限是private。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社类的声明是类定义中的实现部分,这部分包含所有在说明部分说明的函数定义。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社类成员的访问权限1
9、)公有类型(public)公有类型允许对数据成员或函数进行访问,它是类与外部的接口,任何外部函数都可以访问公有类型的数据成员或函数。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社类成员的访问权限2)保护类型(protected)保护类型的访问级别比较严格,只有类、派生类的成员函数可以访问。保护类型仿佛将函数或数据成员安放在一道安全门之后,只有那些特定的类才能访问它们。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社类成员的访问权限3)私有类型(private)私有类型给数据成员和函数最严密的保护,只有成员函数才能修改私有数据成员变量或执行私有函数。【例
10、3-1】定义一个名为Person的类,其属性包括年龄、姓名、性别,成员函数包括输入个人信息、得到姓名、得到年龄、得到性别、显示个人信息。(光盘:第3章例3_1)电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社类成员的访问权限这里为类增加了数据成员和成员函数,为了使类能实现具体的功能还需要为成员函数增加函数体。成员函数实现的基本格式为:(类型)(类型) 类名类名 :函数名(形式参数):函数名(形式参数)函数体函数体电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社类成员的访问权限从基本格式中可以看出,除去“类名:”部分,成员函数与一般的函数定义没有差别。由于
11、C+中允许同一个函数名出现在不同的类中,这表示不同的类中函数包含不同的内容。为了将同名成员函数进行区别,所以引入符号“:”,该符号叫做域运算符,用来指定哪个函数属于哪个类。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社类成员的访问权限如果说类是抽象的,那么对象则是类的实例,也就是说对象总属于某个已知的类。因此,在定义对象之前,一定要先定义好该对象所属的类。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社对象对象的声明可在声明类时直接声明,也可在声明类后再单独声明。对象的声明方法如下: ;也可以定义指向类的指针: ;电脑基础实例上机系列丛书Visual
12、C+程序设计教程清华大学出版社对象对象声明后就可以使用,通过对象可以访问类中的公有数据成员和成员函数,访问的方法为:. 电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社对象如果使用指向类的指针方式,则访问的方法为:或.在使用对象时,就可以调用类中的成员。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社类的作用域类的作用域是指在类的定义中由一对大括号所括起来的部分。具体地讲,某个类A中某个成员M在下列情况下具有类A的作用域:成员M出现在类A的某个成员函数中,并且该成员函数没有定义同名标识符。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版
13、社类的作用域成员M出现在a.M或A:M表达式中,其中a是A的对象。成员M出现在pa-M这样的表达式中,其中pa是一个指向A类对象的指针。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社类的初始化构造函数与析构函数构造函数与析构函数是类的两种特殊的成员函数。1)构造函数在创建了一个对象后,需要对该对象的数据成员进行初始化。VisualC+允许通过一个专门的函数构造函数来自动完成这些工作。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社类的初始化构造函数与析构函数构造函数的名称必须与类名相同,以便系统能识别它构造函数的特点如下:构造函数是成员函数,函数体可写
14、在类体内,也可写在类体外。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社类的初始化构造函数与析构函数构造函数是一个特殊的函数,该函数的名字与类名相同,一般声明为public函数,无返回值,不指定类型,也不需要加void类型声明。程序中不能直接调用构造函数,在创建对象时系统自动调用构造函数。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社类的初始化构造函数与析构函数构造函数的声明格式为:类名(形式参数)类名(形式参数) 函数体;函数体;电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社类的初始化构造函数与析构函数2)析构函数析构函数与构
15、造函数功能相反,当对象所在的函数已执行完毕,系统自动执行析构函数,并将对象占用的资源释放。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社类的初始化构造函数与析构函数析构函数的特点如下:析构函数也是成员函数,函数体可写在类体内,也可以写在类体外。析构函数的名称与类名相同,另外需在其前面加“”字符,用于区别构造函数。析构函数不指定数据类型,并且也没有参数。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社类的初始化构造函数与析构函数一个类中只可能定义一个析构函数,不能重载。析构函数的声明格式为:类名(类名( ) 函数体函数体电脑基础实例上机系列丛书Visua
16、l C+程序设计教程清华大学出版社类的初始化构造函数与析构函数【例3-2】定义一个名为Person的类,在类中声明构造函数和析构函数,并分析它们在Person类中的作用。(光盘:第3章例3_2)在这个程序中,如果不写入构造函数和析构函数,则执行的结果错误。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社无构造函数、析构函数的执行结果电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社类的初始化构造函数与析构函数这里只为构造函数和析构函数各写了一个输出语句,在主函数中并没有出现对它们的调用指令,而执行过程中自动对构造函数和析构函数进行了调用。电脑基础实例上机系
17、列丛书Visual C+程序设计教程清华大学出版社类的初始化构造函数与析构函数在这个例子中,当声明一个类的对象后,如果不做任何操作,系统会自动调用类的构造函数。当对对象使用完毕后,为了释放系统资源,系统会自动调用类的析构函数。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社自动调用构造、析构函数的执行结果电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社类的初始化构造函数与析构函数每声明一个类的对象就会调用一次构造函数,使用完毕后就释放资源调用析构函数,因此在输出的最后两行先后释放p2和p1所占用的系统资源,从而两次输出“这是析构函数”。电脑基础实例上机系
18、列丛书Visual C+程序设计教程清华大学出版社类的初始化构造函数与析构函数【例3-3】先建立一个新工程,再编辑程序,从而掌握一个完整的Person类及其对象的使用。(光盘:第3章例3_3)电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社完整的类及对象的定义与使用电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社类的对象成员当一个类中的数据成员是某一个类的一个对象时,即称这个数据成员是新建类的子对象或对象成员。定义对象成员的方法为:class X 类名类名1 成员名成员名1;电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社类的对象成员
19、类名类名2 成员名成员名2; 类名类名n 成员名成员名n; /其他成员其他成员;电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社类的对象成员这里X为新建类的类名,类名1、类名2、类名n,必须为已定义过的类。【例3-4】类的对象成员举例,学习定义对象成员的方法。(光盘:第3章例3_4)电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社类的对象成员新类的构造函数一般的声明格式为:新类(参数表新类(参数表0):成员):成员1(参数表(参数表1),),成员成员2(参数表(参数表2)成员成员n(参数表(参数表n) 电脑基础实例上机系列丛书Visual C+程序设计教
20、程清华大学出版社类的对象成员其中,成员1、成员2成员n是新类中的对象成员;参数表1提供初始化成员1所需要的参数,参数表2提供初始化成员2所需要的参数,依此类推。这几个参数表中的参数均来自参数表0。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社*this指针*this指针是一个指向当前被操作对象的特殊指针。在类的成员函数中*this指针代表当前对象。*this指针可显式使用也可以隐式使用。类中的成员函数可直接访问该类的其他成员,且同一个类的不同对象都共享同一组成员函数。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社*this指针*this指针只允许在成
21、员函数内使用,不允许修改指针的值,但可以改变指针所指向数据的值。【例3-5】建立名为COne的类,成员函数为copy和print,在copy函数中显式使用*this指针,将形式参数赋值给当前操作对象,在主函数中调用copy函数,为对象赋值并输出。(光盘:第3章例3_5)电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社使用*this指针的运行结果电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社继承与派生C+语言中的继承是类和类之间一种特殊关系的表示,是基于已存在的类创建新类的方法。类的继承性是C+语言与C语言之间的最大区别,也是OOP的重要特点之一。在解释
22、继承的意义前,仍然采用前面猫、狗类的例子说明与继承有关的名词。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社继承与派生基类(baseclass):猫、狗类继承于哺乳动物类,因此哺乳类就是猫、狗类的基类,也称为父类。派生类(derivedclass):猫、狗类就是继承于哺乳类的派生类,也称为子类。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社继承与派生电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社继承与派生继承的概念来自于分类与遗传。人类习惯利用分类来管理与了解现实世界里的对象。以生物分类为例:界、门、纲等这些分类等级中,低层次分
23、类都具备其高层次分类的特性。另一个理解继承的概念来自于遗传,每个人的特征或多或少都来自于父母的遗传,但每个人都不可能完全与父亲或母亲一模一样,有着自己与众不同的特征。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社继承与派生因此,在OOP里继承使得派生类具有基类的特性,同时又允许在派生类的声明时增加自己的特性,或修改基类的特性。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社继承与派生电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社继承与派生一个派生类既可从一个基类派生也可从多个基类派生。从一个基类派生称为单继承,从多个基类派生称为多
24、重继承。派生类的一般形式如下:class 派生类名派生类名:访问方式访问方式 基类名基类名1,访问方式访问方式 基类名基类名2,,访问方式,访问方式 基类名基类名n 派生类中的新成员派生类中的新成员;电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社继承与派生其访问方式可以为public(公有继承)、protected(保护继承)、private(私有继承)中的任何一种,下面分别进行讲解。公有继承:如果A类采用public继承方式继承B类,A类将继承B类的public成员与protected成员,且继承后原成员函数的访问级别不变。电脑基础实例上机系列丛书Visual C+程序
25、设计教程清华大学出版社继承与派生保护继承:如果A类采用protected继承方式继承B类,A类将继承B类的public成员与protected成员,继承后成员函数的访问级别均为protected。私有继承:如果A类采用private继承方式继承B类,A类将继承B类的public成员与protected成员,继承后成员函数的访问级别均为private。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社继承与派生【例3-6】建立一个名为Person的基类,其属性包括年龄、性别、姓名和输入信息及输出信息成员函数;一个名为Company的基类,其属性包括部门、职务、输入信息及输出信息
26、成员函数;再建立一个名为Workman的继承派生类,具备薪水属性、输入信息及输出信息成员函数;输入相关信息,显示其属性。(光盘:第3章例3_6)电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社派生类的多重继承性电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社继承与派生该例中,派生类Workman派生于Person类和Company类,属于多重继承,具有Person类和Company类的共性。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社继承与派生公司职员信息既包含独立的个人信息也包含所在公司的信息。从上图中可以看出,采用继承方式可以
27、体现出对象本身的层次。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社继承与派生在输入公司职员信息时,调用了其基类的registp、registc两个成员函数。如果没有采用继承的方式,Workman类中将重复输入个人信息和公司信息的指令,从而增加了工作量。由此,可以看出继承的主要作用体现在提高编程效率上。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社继承与派生在公司职员信息中,还添加了其基类中没有的成员salary。它作为自身特有的成员,单独写在Workman类中。此例中,继承的方式为public公有继承方式,派生类可以访问基类的所有public成员。
28、电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社继承与派生下面试着更改一下继承的方式:classWorkman:publicPerson,protectedCompany编译该程序后系统报错:电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社继承与派生由于Company基类的访问级别设为protected,Workman类只能以protected方式访问Company类中的public成员,因此公有成员函数registc与showc不能被访问,即系统报错。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社多态性函数重载和运算符重载是简单的
29、一类多态性。重要的多态性是建立在虚函数的概念和方法基础之上的,下面重点讲解。函数重载静态联编与动态联编电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社函数重载【例3-7】建立一个类A,为output成员函数配置不同的输入形式参数,实现函数重载。(光盘:第3章例3_7)电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社函数重载在A类中定义了4个同名的成员函数output,前3个靠参数类型进行识别,而最后一个函数则依靠参数个数进行识别。函数重载就是为同一个函数名赋以多个含义,其特点有如下两个:电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社
30、函数重载C+中允许在相同的作用域内以相同的名字定义几个不同的函数,可以是成员函数也可以是非成员函数。定义重载函数要求函数的参数至少有一个类型不同,或者个数不同。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社函数重载重载函数的意义在于它可以用相同的名字访问一组相互关联的函数,由编译程序来进行选择,因而这将有助于解决程序复杂性问题。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社函数重载函数的返回类型对确定重载函数没有意义,因为在没有确定一个函数要调用哪个重载函数之前,函数的返回类型也是不确定的。当然,如果确定调用某个重载函数,则函数调用表达式的类型也就被
31、惟一地确定下来。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社函数重载在类中不能进行下述形式的重载声明:classApublic:voidoutput(char*s)coutsendl;电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社函数重载voidoutput(char*s,intn=1)coutsnendl;电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社函数重载如果使用“a.output(“helloworld”);”则会发生逻辑混乱,造成调用时的二义性,即无法惟一确定调用的是哪个重载函数。因此,也就不会出现期望的输出结果:h
32、ellowworldhellowworld0这种缺省参数的形式应避免。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社静态联编与动态联编由于函数重载的存在,当程序中出现调用同名函数时,编译器会根据函数的参数类型和个数决定调用哪一个同名函数的代码,这种把一个函数的调用与适当的函数代码联系在一起的过程叫做联编。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社静态联编与动态联编按照联编所进行的阶段不同,可分为两种不同的联编方式,即静态联编和动态联编。静态联编动态联编虚函数电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社静态联编静态联编是在程
33、序编译阶段确定一个函数调研能够与函数代码间的对应关系,这种对应关系确定以后,在程序运行过程中就根据这个对应关系去调用并执行相关的函数代码,并且这种对应关系在程序运行过程中保持不变。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社静态联编【例3-8】建立一个基类Point,所具备的属性包括X、Y坐标和求面积公式;再建立一个派生类Rectangle,所具备的属性为长、宽、四个角的坐标,求面积计算公式,计算输入坐标下矩形的面积。(光盘:第3章例3_8)电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社静态联编的执行结果电脑基础实例上机系列丛书Visual C+程
34、序设计教程清华大学出版社静态联编执行程序后我们发现其结果并不是期望的矩形面积,这是因为在fun()函数中,s所引用的对象执行的area()函数操作被关联到Point:area()函数的代码上。在程序编译阶段,对s引用的对象所执行的area()函数操作只能约束到Point类的函数上,因此输出结果为0。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社静态联编而我们期望的是fun()函数执行后能得到矩形的面积,也就是说s引用的对象所执行的area操作应约束到Rectangle类的area()函数上,但是这是静态联编所无法实现的。电脑基础实例上机系列丛书Visual C+程序设计教
35、程清华大学出版社动态联编动态联编在编译阶段不能决定执行哪个同名的被调函数,只在程序运行过程中根据需要处理的对象类型来决定执行哪个类的成员函数。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社动态联编动态联编实际上是进行动态识别。前面分析过了静态联编时,fun()函数中s的对象被约束到Point类上,而我们期望的是程序运行时能将s的对象约束到Rectangle类上。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社动态联编可见,同一个对象引用在不同阶段被约定的类的对象是不同的。那么如何来确定是静态联编还是动态联编呢?C+规定动态联编是在虚函数支持下实现的。通
36、过上述分析可以看出,静态联编和动态联编也是属于多态性的,是不同阶段对不同实现进行不同的选择。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社虚函数虚函数是动态联编的基础,它是一种成员函数。虚函数的声明方法为: virtual ()如果某类中的一个成员函数声明为虚函数,这意味着该成员函数在派生类中可能有不同的实现。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社虚函数【例3-9】建立一个名为Point的基类,有X、Y坐标属性,并定义一个虚函数area()。再定义一个派生类Rectangle,其属性包括四个角的坐标位置和求面积的成员函数area(),计算给定
37、四个角坐标的矩形面积。(光盘:第3章例3_9)电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社给定四个角坐标计算矩形面积电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社虚函数与上例不同,Point类成员函数area()前添加了virtual关键字,即area()函数被声明为虚函数。在程序运行时,s被动态联编,并约束为Rectangle类中的area()函数。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社虚函数通过这个例子可以看到,在派生类中对基类的虚函数进行替换时,要求派生类中说明的虚函数与基类中被替换的虚函数满足如下条件:与基类的
38、虚函数有相同的参数个数。其参数的类型与基类中虚函数的对应参数类型相同。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社虚函数【例3-10】给出4种简单的几何图形,计算图形面积。(光盘:第3章例3_10)计算公式:三角形(Triangle)面积公式:底高2矩形(Rectangle)面积公式:长宽圆(Circle)面积公式:半径半径梯形(Trapeziod)面积公式:(上底+下底)高2电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社不同形状的类调用虚函数area()的计算结果电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社程序中类之间的关
39、系电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社虚函数其中,Shape类的作用如下:Shape类是一个抽象类,它封装了作为图形应有的两个属性名称和面积。Shape类是Traingle等4个类的根,其声明了派生类中所共有的名称*n()和面积area()两个虚函数。这两个虚函数在每个派生类中都有不同的实现。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社虚函数该程序的这种结构对于增加不同的图形十分方便。在输出时,指定了一个指向Shape类对象数组的指针*s3,方便了访问。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社上机练习前面介绍了
40、与类有关的成员变量、成员函数、基类、派生类、虚函数等概念,下面通过运用这些知识点作两个练习,使用户熟练掌握它们的应用方法。设计一个CRectangle类一个Building类及其派生电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社设计一个CRectangle类设计一个类Crectangle(光盘:第3章上机练习上机练习1),要求如下:该类的私有成员变量存放类CRectangle的长和宽,并且设置其默认值为1。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社设计一个CRectangle类通过成员函数设置长和宽,并确保长和宽都在050范围内。求周长Perim
41、eter。取一个长为3,宽为4的矩形进行测试。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社CRectangle类的运行结果电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社一个Building类及其派生建立普通的基类Building,用来存储一座楼房的层数、房间数以及它的总平方米数。建立派生类House继承Building,并存储下面的内容:卧室与浴室的数量。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社一个Building类及其派生另外建立派生类Office,继承Building,并存储灭火器与电话的数目。通过本练习,熟练掌握基
42、类与派生类的生成关系,通过程序的运行,进一步体会派生类属性与基类属性之间的继承关系。(光盘:第3章上机练习上机练习2)电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社House与Office对Building类继承运行结果电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社习题(1)定义一个点类Point,要求如下:用构造函数初始化类Point的对象。定义函数Distance,计算平面上两点间的距离。电脑基础实例上机系列丛书Visual C+程序设计教程清华大学出版社习题(2)编写一个程序,其中有一个汽车类vehicle,它具有一个需要传递参数的构造函数,类中的数据成员包括:车轮个数wheels和车重weight作为保护成员;小车类car是它的私有派生类,其中包含载人数passengers;卡车类truck是vehicle的私有派生类,其中包含载人数passengers和载重量payload。每个类都需有相关数据的输出方法。