实验8 多态性与虚函数

实验8 多态性与虚函数
实验8 多态性与虚函数

实验8 多态性与虚函数

实验八多态性与虚函数 一、实验目的和要求 1.了解多态的概念; 2.了解虚函数的作用及使用方法; 3.了解静态关联和动态关联的概念和用法; 4.了解纯虚函数和抽象类的概念和用法 二、实验内容和结果 1.阅读下面的程序 1.1请写出程序的执行结果,并在上机时对照理解 class Vehicle {public: void run() const { cout << "run a vehicle. "<

airplane.run(); cout<<"(b) 用指向基类的指针访问成员函数: "<run(); vp=&airplane; vp‐>run(); } 1.2 如果将Vehicle 类的定义修改为虚函数,其余不变,请写出程序的执行结果,并在上机时对照理解 class Vehicle {public: virtual void run() const { cout << "run a vehicle. "<

c++多态性与虚函数习题

作业题 一、写出下列程序运行结果 1.#include using namespace std; class A { public: virtual void func( ) {cout<<”func in class A”< using namespace std; class A{ public: virtual ~A( ){ cout<<”A::~A( ) called “<

}; void fun(A *a) { delete a; } int main( ) { A *a=new B(10); fun(a); } 二、程序设计题 1有一个交通工具类vehicle,将它作为基类派生小车类car、卡车类truck和轮船类boat,定义这些类并定义一个虚函数用来显示各类信息。 5.2定义一个shape抽象类,派生出Rectangle类和Circle类,计算各派生类对象的面积Area( )。 5.5某学校对教师每月工资的计算公式如下:固定工资+课时补贴。教授的固定工资为5000元,每个课时补贴50元;副教授的固定工资为3000元,每个课时补贴30元;讲师的固定工资为2000元,每个课时补贴20元。给出教师抽象类及主函数,补充编写程序求若干教师的月工资。 #include using namespace std; class Teacher{ protected: double salary; int workhours; public: Teacher(int wh=0){workhours=wh;} virtual void cal_salary()=0; void print(){cout<cal_salary(); prof.print(); Vice_Prof vice_prof(250); pt=&vice_prof; pt->cal_salary(); vice_prof.print(); Lecture lecture(100); pt=&lecture; pt->cal_salary(); lecture.print (); return 0; }

实验6多态性与虚函数

[实验目的] 1、了解多态性的概念; 2、了解虚函数的用途及使用方法; 3、了解纯虚函数和抽象类的概念和用法。 [实验要求] 给出以下各实验内容的源程序代码,并把编译、运行过程中出现的问题以及解决方法填入实验报告中,按时上交。 [实验学时] 2学时。 [实验内容] 1、写一个程序,定义抽象基类Shape,由它派生出3个派生类:Circle(圆形)、Square(正方形)、Rectangle(矩形)。利用指针、虚函数printArea()分别输出以上三者的面积,3个图形的数据在定义对象时给定。 [源程序] #include using namespace std; class Shape { public: virtual float area()const=0; virtual void display()const=0; }; class Circle:public Shape { public: Circle(double a):r(a){} virtual float area()const{return 3.14*r*r;} virtual void display()const { cout<<"圆面积"<

class Rectangle:public Shape { public: Rectangle(double a,double b):l(a),w(b){} virtual float area()const{return l*w;} virtual void display()const { cout<<"矩形面积"<display(); m=m+p[i]->area(); }

实验三虚函数与多态纯虚函数(完全版)

实验三虚函数与多态、纯虚函数 一.实验目的 1. 在掌握继承与派生关系的基础上,进一步理解虚函数与多态性的关系,实现运行时的多态。 2. 学会定义和使用纯虚函数 二、实验内容 1.范例:了解"单接口,多方法"的概念。现有称为figure的基类,存放了各二维对象(三角形、矩形和圆形三个类)的各维数据,set_dim()设置数据,是标准成员函数。 show_area()为虚函数,因为计算各对象的面积的方法是不同的。 【程序】 #include < iostream > using namespace std; class figure{ protected: double x,y;

public: void set_dim(double i,double j=0) { x=i; y=j; } virtual void show_area() { cout<<"No area computation defined for this class.\n"; } }; class triangle:public figure{ public: void show_area() { cout<<"Triangle with height "<< x<<" and base "<< y<<" has an area of "<< x*0.5*y<< endl; } }; class square:public figure{ public:

void show_area() { cout<<"Square with dimensions "<< x<<" and "<< y<<" has an area of "<< x*y<< endl; } }; class circle:public figure{ public: void show_area() { cout<<"Circle with radius "<< x<<" has an area of "<<3.14159*x*x<< endl; } }; int main(){ figure *p; triangle t; square s;

实验六 多态性和虚函数

实验六多态性和虚函数 一、实验目的 1、了解多态性的概念。 2、了解虚函数的作用及其使用方法。 3、了解静态关联和动态关联的概念和用法。 4、了解纯虚函数和抽象类的概念和用法。 二、实验要求 1、分析程序运行结果,掌握虚函数的使用。 程序一: #include class ONE { public: virtual void f(){cout<<"l"<f(); } 程序二: #include class Base { public: virtual void fn() { cout <<"In Base Class\n";} }; class SubClass :public Base { public: virtual void fn(){ cout <<"In Sub Class\n"; } }; void main()

{ Base bc,*p; SubClass sc; p=&bc; p->fn(); p=≻ p->fn(); } 2、实现一个类A,在A中有两个私有的整型变量a和b,定义构造函数对a和b进行初始化,并实现成员函数geta()取得a的值和getb()取b的值。实现类B从A继承,覆盖geta(),使其返回a的2倍。主函数中声明类B对象,调用类B中的geta()并将结果输出。 3、声明抽象基类Shape,由它派生出3个派生类:Cirle(圆形)、Rectangle(矩形)、Triangle (三角形),用一个函数printArea分别输出以上三者的面积,3个图形的数据在定义对象是给定。

实验五 虚函数与多态性

实验三继承与多态性 一、实验目的与要求 1、掌握继承、基类和派生类的概念。 2、掌握初始化基类成员的方法。 3、掌握派生类对基类的继承。 4、学习虚函数和纯虚函数的定义与使用方式。 5、理解抽象类的概念,学习如何用指针指向其他的派生类,实现多态性。 6、掌握抽象类的定义与使用方式,并注意指针的用法。 7、学习如何使用虚函数、纯虚函数、抽象类和实现类的多态性。 二、实验设备与平台 实验设备要求每个学生一台电脑,其中运行环境为VC++ 6.0系统或新版。 三、实验内容与步骤 实验:编写一个人员信息管理系统。这个系统的功能是:交互式地实现校园人员信息的录入与显示。 分析: 学校里,主要有四类人员:大学本科学生、教师、研究生和助教。 大学本科生每周有固定的学时数。教师除了固定的学时数外,还有每周的教学时数。研究生除了固定的学时数外,每周还可以自由做一定的研究。助教除了上课外,还要做研究和一定的教学工作。 人员的基本信息包括姓名、编号、性别、身份证号、总学时数、以及每周固定学时数。各个人员之间的关系:people类派生出student类和teacher类,student类派生出graduate 类,graduate类和teacher类派生出TA类。 以下给出部分程序: #include using namespace std; class people { public: //添加程序 private: }; class student: virtual public people {

public: //添加程序 private: }; class teacher: virtual public people { public: //添加程序 private: }; class graduate: virtual public student { public: //添加程序 private: }; class TA: public graduate, public teacher { public: //添加程序 private: }; void main() { //添加程序 }

实验8_继承和多态

实验08:继承与多态 实验学时:6 实验类型:验证、设计 实验要求:必修 一、实验目的 1.理解继承的概念,了解面向对象设计中继承和多态的合理性; 2.掌握派生类的构造与析构; 3.掌握在对象中使用类层次和继承思想进行设计、实现和测试; 4.区别运行时的多态性的实现,理解重载与同名覆盖的差异; 5.理解虚函数与多态性; 6.实现运行时多态性的程序设计。 二、实验内容 1.Difine a class called PartFileledArrayWMax that is a derived class of the class PartFilledArray. The class PartFilledArrayWMax has one additional member variable named max_value that holds the maximum value stored in the array. Define a member accessor function named get_max that returns the maximum value stored in the array. Redefine the member function add_value and define two constructors, one of which has an int argument for the maximum number of entries in the array. Also define a copy constructor, an overloaded assignment operator, and a destructor. (A real class would have more member functions, but these will do for an exercise.) 2.某公司雇员(employee)包括经理(Manager)、技术人员(Technician)和销售员(Saleman)。开发部经理(developermanager)既是经理也是技术人员,销售部经理(salesmanager)既是经理也是销售员。 以employee类为虚基类,派生出manager、technician和saleman类,再进一步派生出developermanager和salesmanager类。 Employee类的属性包括姓名、职工号、工资级别、月薪(实发基本工资加业绩工资);操作包括月薪计算函数pay(),该函数要求输入请假天数,扣除应扣工

多态性和虚函数 实验报告

淮海工学院计算机科学系实验报告书 课程名:《 C++程序设计(二)》 题目:多态性和虚函数 班级: 学号: 姓名:

1、实验内容或题目 (1)声明二维坐标类作为基类派生圆的类,把派生类圆作为基类,派生圆柱体类。其中,基类二维坐标类有成员数据:x、y坐标值;有成员函数:构造函数实现对基类成员数据的初始化、输出的成员函数,要求输出坐标位置。派生类圆类有新增成员数据:半径(R);有成员函数:构造函数实现对成员数据的初始化、计算圆面积的成员函数、输出半径的成员函数。派生圆柱体类新增数据有高(H);新增成员函数有:构造函数、计算圆柱体体积的函数和输出所有成员的函数。请完成程序代码的编写、调试。 (2)教材393页7-8题。 (3)教材416页1、4、5题。 2、实验目的与要求 (1)理解继承与派生的概念 (2)掌握通过继承派生出一个新的类的方法 (3)了解多态性的概念 (4)了解虚函数的作用与使用方法 3、实验步骤与源程序 ⑴实验步骤 先定义一个基类point,及其成员函数,然后以public的继承方式定义子类circle,再定义一个派生类cylinder,最后在main主函数中定义类对象,调用函数实现其功能。 先定义一个基类A及其重载的构造函数,然后以Public派生出子类B,再定义其构造函数,最后在main主函数中定义类对象,调用成员函数实现其功能。 ⑵源代码 1.#include class Point { public: Point(float=0,float=0); void setPoint(float,float); float getX() const {return x;}

c++多态性与虚函数习题答案

多态性与虚函数 1.概念填空题 1.1 C++支持两种多态性,分别是编译时和运行时。 1.2在编译时就确定的函数调用称为静态联编,它通过使用函数重载,模板等实现。 1.3在运行时才确定的函数调用称为动态联编,它通过虚函数来实现。 1.4虚函数的声明方法是在函数原型前加上关键字virtual。在基类中含有虚函数,在派生类中的函数没有显式写出virtual关键字,系统依据以下规则判断派生类的这个函数是否是虚函数:该函数是否和基类的虚函数同名;是否与基类的虚函数参数个数相同、类型;是否与基类的虚函数相同返回类型。如果满足上述3个条件,派生类的函数就是虚函数。并且该函数覆盖基类的虚函数。 1.5 纯虚函数是一种特别的虚函数,它没有函数的函数体部分,也没有为函数的功能提供实现的代码,它的实现版本必须由派生类给出,因此纯虚函数不能是友元函数。拥有纯虚函数的类就是抽象类类,这种类不能实例化。如果纯虚函数没有被重载,则派生类将继承此纯虚函数,即该派生类也是抽象。 3.选择题 3.1在C++中,要实现动态联编,必须使用(D)调用虚函数。 A.类名 B.派生类指针 C.对象名 D.基类指针 3.2下列函数中,不能说明为虚函数的是(C)。 A.私有成员函数 B.公有成员函数 C.构造函数 D.析构函数 3.3在派生类中,重载一个虚函数时,要求函数名、参数的个数、参数的类型、参数的顺序和函数的返回值(A)。 A.相同 B.不同 C.相容 D.部分相同 3.4当一个类的某个函数被说明为virtual时,该函数在该类的所有派生类中(A)。 A.都是虚函数 B.只有被重新说明时才是虚函数 C.只有被重新说明为virtual时才是虚函数 D.都不是虚函数 3.5(C)是一个在基类中说明的虚函数,它在该基类中没有定义,但要求任何派生类都必须定义自己的版本。 A.虚析构函数B.虚构造函数 C.纯虚函数D.静态成员函数 3.6 以下基类中的成员函数,哪个表示纯虚函数(C)。 A.virtual void vf(int);B.void vf(int)=0; C.virtual void vf( )=0;D.virtual void vf(int){ } 3.7下列描述中,(D)是抽象类的特性。 A.可以说明虚函数 B.可以进行构造函数重载 C.可以定义友元函数 D.不能定义其对象 3.8类B是类A的公有派生类,类A和类B中都定义了虚函数func( ),p是一个指向类A对象的指针,则p->A::func( )将(A)。

实验四 类的多态性与虚函数

实验四类的多态性与虚函数 (实验课时:2 实验性质:设计) 实验名称: 类的多态性与虚函数 实验目的: (1)了解多态性的概念; (2)了解虚函数的作用和使用方法; (3)了解纯虚函数和抽象类的概念和用法。 实验设备:(1)硬件:个人微机(配置不低于:CPU为P4,主频1.6G,内存256MB,硬盘40GB); (2)软件:操作系统为WindowsXP(或2000、server2003等),工具软件为Visual C++6.0。 实验内容: 事先编好程序,上机调试和运行程序,分析结果。 (1)编程:定义抽象基类Shape(图形)。 Shape类有一个公共的纯虚函数Area,用于派生类求图形的面积。 (2)由Shape派生出3个派生类:Circle(圆形)、Rectangle(矩形)、Triangle(三角形),用一个函数PrintArea分别输出以上三者的面积,3个图形的数据在定义对象时给定。 在主程序中测试这些类的PrintArea函数。 (3)在类Circle基础上再派生一个圆柱体Cylinder,重载Area函数求圆柱体的体积。然后,编写主程序采用静态多态性和动态多态性分别测试Area函数。 (4)在类Circle中定义一个析构函数,让它输出一行信息“This is Cicle Destruction。”,在类Cylinder中定义一个析构函数,让它输出一行信息“This is Cylinder Destruction。”。 在主程序中用指向基类Circle类的指针动态生成Cylinder类对象,然后用delete 语句释放该对象,测试看看运行结果如何。再修改Circle的析构函数为虚函数,测试看看运行结果如何。 (5)运行上述程序,并分析结果。 实验要求: (1)掌握多态性的概念; (2)掌握虚函数的作用和使用方法; (3)掌握纯虚函数和抽象类的概念和用法; (4)程序格式规范,程序运行正确; (5)认真书写实验报告,如实填写各项实验内容。 实验步骤: (1)启动Visual C++6.0开发环境; (2)创建一个项目; (3)建立C++源程序文件; (4)编辑C++源程序文件内容; (5)建立并运行可执行程序,并分析结果; (6)关闭工作空间。 思考题:虚函数的作用是什么?、

实验6多态性与虚函数

序号 实验6多态性与虚函数 [实验目的] ---------------------- 1、了解多态性的概念; 2、了解虚函数的用途及使用方法; 3、了解纯虚函数和抽象类的概念和用法。 [实验要求] 给出以下各实验内容的源程序代码,并把编译、运行过程中出现的问题 以及解决方法填入实验报告中,按时上交。 [实验学时] 2学时。 [实验内容] 1、写一个程序,定义抽象基类Shape由它派生出3个派生类:Circle(圆形)、Square正方形)、Rectangle矩形)。利用指针、虚函数printArea()分别输出以上三者的面积,3个图形的数据在定义对象时给定。 [源程序] #in clude using n amespace std; class Shape { public: virtual float area()c on st=0; virtual void display()c on st=0; }; class Circle:public Shape { public: Circle(double a):r(a){} virtual float area()co nst{return 3.14*r*r;} virtual void display()c onst { cout?"圆面积"<

class Recta ngle:public Shape { public: Rectangle(double a,double b):l(a),w(b){} virtual float area()c on st{return l*w;} virtual void display()c onst { cout?"矩形面积"<display(); m=m+p[i]->area(); {

实验八 虚函数及应用

实验八虚函数及应用 一、实验目的 1.理解虚函数与运行时(动态)多态性之间的关系,掌握虚函数的定义及应用; 2.理解纯虚函数与抽象类的概念,掌握抽象类的定义及应用; 3.理解虚析构函数的概念及作用。 二、实验学时 课内实验:2课时课外练习:2课时 三本实验涉及的新知识 ㈠虚函数与动态多态性 在C++中,如果将基类与派生类的同名成员函数定义为虚函数,就可以定义一个基类指针,当基类指针指向基类对象时访问基类的成员函数,当基类指针指向派生类对象时访问派生类的成员函数,实现在运行时根据基类指针所指向的对象动态调用成员函数,实现动态多态性。换句话说,虚函数与派生类相结合,使C++能支持运行时(动态)多态性,实现在基类中定义派生类所拥有的通用“接口”,而在派生类中定义具体的实现方法,即“一个接口,多种方法”。 ㈡虚函数的定义 1.在基类中定义 在定义函数的前面加上“virtual ”。即: virtual 返回类型函数名(参数表) { …… } 2.在派生类中定义 函数的返回类型、函数名、参数的个数、参数类型及顺序必须与基类中的原型完全相同。 3.说明: ⑴在派生类中定义虚函数时,可用“virtual”也可不用“virtual”(最好都使用)。 ⑵虚函数在派生类中重新定义时,其原型必须与基类中相同。 ⑶必须用基类指针访问虚函数才能实现运行时(动态)多态性;当用普通成员函数的调用方法(即用圆点运算符)调用虚函数时,为静态调用; ⑷虚函数在自身类中必须声明为成员函数(不能为友元函数或静态成员函数),但在另一个类中可以声明为友元函数。 ⑸虚函数可以公有继承多次,其虚函数的特性不变。 ⑹构造函数不能定义为虚函数,但析构函数可以定义为虚函数。 ⑺虚函数与重载函数的关系 ①普通函数重载是通过参数类型或参数的个数不同实现的;重载一个虚函数时,其函数原型(返回类型、参数个数、类型及顺序)完全相同。 ②当重载的虚函数只有返回类型不同时,系统将给出错误信息;如果定义的虚函数只有函数名相同,而参数个数或类型不同时,则为普通函数重载。 ㈢纯虚函数与抽象类 1.纯虚函数定义 格式:

实验8 多态性

实验8 多态性 一、实验目的 1、进一步理解类继承的概念、定义及其派生类对象的简单操作。 2、理解如何重新定义(重载)运算符以使用新类型。 3、了解何时重载以及何时不重载运算符。 4、理解虚函数和抽象类的使用目的。 二、实验内容及步骤 1、填空 (1)关键字引入了重载运算符函数定义。 (2)不能重载的C++运算符是、、、和。 (3)通过重载运算符不能修改运算符 的、 、和。 2、选择题,先选择,然后解释选择的理由: (1) 运算符重载时不需要保持的性质是:() A)操作数类型 B)操作数个数 C)优先级 D)结合性 (2) 有如下类定义和变量定义: #include class X { int a; void setX (int x) {a=x;} public: void showX() {cout<<"a="<

下列语句中正确的是:( ) A) objY.setX(3); B) objY.showX(); C) objZ.setY(4); D) objZ.showY(); (3) 有如下类定义: #include class A { int xx; public: A():xx(0) {cout<<'A';} A(int n):xx(n) {cout<<'B';} }; class B:public A { int yy; public: B():yy(0){cout<

多态性与虚函数练习

1. 设计一个评选优秀教师和学生的程序,其类结构如图1所示。当输入一系列教师或学生的记录后,将优秀学生及教师的姓名列出。 图1 类结构 假设运行结果如下所示: #include #include using namespace std; class Base { public: void getname(){ cout<<"姓名:";cin>>name;} void printname() { cout<>num;} int isgood() { return num>90?1:0;} private: int num; }; class Teacher:public Base { public: void getnum() { cout<< "每年发表论文数:";cin>>num;} int isgood(){ return num>3?1:0;} private: int num; }; int main() { Base *p[50]; Student *pstud; Teacher *ptech; char ch; int count=0; do { cout<<"Input teacher(t) or student(s):"; cin>>ch; if(ch=='s') { pstud=new Student; pstud->getname(); pstud->getnum(); p[count++]=pstud;

实验五 虚函数与多态性

实验五 虚函数与多态性(4学时) [实验目的] 1、 掌握运算符重载的基本方法;掌握虚函数的定义与使用方法。 2、 理解静态多态性和动态多态性;掌握使用虚函数和继承实现动态多态性的方法。 [实验内容与步骤] 1、 定义Pomt 类,包含有坐标x ,y 两个成员变量,对Pomt 类重载运算符 ++(功能:坐标值x ,y 增1)和 --(功能:坐标值x ,y 减1),实现对坐标值的增减。 2、 定义一个车(vehicle )基类,有Run 、Stop 等成员函数,由此派生出自行车(bicycle )类、汽车(motorcar )类,从vehicle 和motorcar 派生出摩托车(motorcycle )类,它们都有Run 、Stop 等成员函数。观察虚函数的作用。 3、 对实验三中的people 类重载运算符 == 和 = 。其中,== 用于判断两个people 类对象的id 属性是否相等;= 则实现对people 类对象的赋值操作。 4、 定义矩阵类,重载运算符 + 和 *,实现对矩阵类对象的相加和相乘。 5、 定义一个类BaseFly ,该类中有一个 Fly ()函数。再定义三个类 BirdFly 、DragonFly 和 PlaneFly ,都继承自 BaseFly ,并重载 Fly ()函数。用各类指针调用各个类对象的 Fly ()函数,体会继承的多态性。 6、 将 BaseFly ∷Fly( ) 函数声明为 virtual ,体会虚函数在多态性中的作用。 [习题与思考题] 1、 建立一个类 convert ,它含有两个私有数据成员 x 与 y ,用于表示直角坐标的位置;另外含有两个私有成员函数getr( )与 getangle( ),用于将直角坐标转换为极坐标。重载运算符 +,使能执行convert 类对象的相加运算。 直角坐标(x ,y )转换为极坐标(r ,θ)的公式为: π θ180tan 122?=+=-x y y x r , 2、 创建字符串类string ,重载运算符 +,使能实现两个字符串的连接;重载运算符 =,使能实现字符串赋值。 3、 针对字符串类string ,重载运算符 <、 > 与 ==,使能实现字符串的比较运算。 4、 针对字符串类string ,重载运算符 +=,使能实现字符串的追加赋值。 5、 声明一个基类shapes ,其中含有protected 类型的数据成员x 、y 和 r ,分别代表矩形的长、宽及圆的半径值。成员函数 insquare ()用于设置数据成员x 、y 的初值,成员函数 incircle ()用于设置数据成员r 的初值。定义 show_area ()为纯虚函数。声明类square 及circle 为shapes 的派生类,其成员函数 show_area ()分别用来计算矩形和圆的面积。 6、 定义一个日期类,含年、月、日3个int 型成员变量,实现运算符 +,- 的重载。其中,运算符 + 实现日期加上一个天数,得到新日期;运算符 - 实现日期减去一个天数,得到新日期。 7、 定义以一个复数类,实现运算符 +,-,*,/,=,== 的重载。

C++继承,虚函数与多态性专题

本文作者:黄邦勇帅 学习本文首先你应熟悉C++中的构造函数,基本的类的声明及怎样初始化类,关于这些问题,请参看本人所作的《C++构造函数,复制构造函数和析构函数》一文,在这篇文章中作了详细的介绍。 本文分两部分即继承和虚函数与多态性,本文第一部分详细讲解了继承时的构造函数和析构函数的问题,父类与子类的同名变量和函数问题,最后介绍了多重继承与虚基类。本文第二部分重点介绍了虚函数与多态性的问题,因此学习虚函数的基础是继承,因此在学习虚函数前应学好继承。本文详细易懂,内容全面,是学习C++的不错的资料。 本文内容完全属于个人见解与参考文现的作者无关,其中难免有误解之处,望指出更正。 声明:禁止抄袭本文,若需要转载本文请注明转载的网址,或者注明转载自“黄邦勇帅”。 主要参考文献: 1、C++.Primer.Plus.第五版.中文版[美]Stephen Prata著孙建春韦强译人民邮电出版社2005年5月 2、C++.Primer.Plus.第四版.中文版Stanley B.Lippman、Barbara E.Moo著李师贤等译人民邮电出版社2006年3月 3、C++.Primer.Plus.第三版.中文版Stanley B.Lippman等著潘爱民张丽译中国电力出版社2002年5月 4、C++入门经典第三版[美]Ivor Horton著李予敏译清华大学出版社2006年1月 5、C++参考大全第四版[美]Herbert Schidt著周志荣朱德芳于秀山等译电子工业出版社2003年9月 6、21天学通第四版C++ [美]Jesse Liberty著康博创作室译人民邮电出版社2002年3月 14 继承(基类,父类,超类),派生类,子类 一:继承中的访问权限关系。 1.基类,父类,超类是指被继承的类,派生类,子类是指继承于基类的类. 2.在C++中使用:冒号表示继承,如class A:public B;表示派生类A从基类B继承而来 3.派生类包含基类的所有成员,而且还包括自已特有的成员,派生类和派生类对象访问基类中的成员就像访问自已的成员一样,可以直接使用,不需加任何操作符,但派生类仍然无法访问基类中的私有成员. 4.在C++中派生类可以同时从多个基类继承,Java不充许这种多重继承,当继承多个基类时,使用逗号将基类隔开.5.基类访问控制符,class A:public B基类以公有方式被继承,A:private B基类以私有方式被继承,A:protected B基类以受保护方式被继承,如果没有访问控制符则默认为私有继承。 6.protected受保护的访问权限:使用protected保护权限表明这个成员是私有的,但在派生类中可以访问基类中的受保护成员。派生类的对象就不能访问受保护的成员了。 7.如果基类以public公有方式被继承,则基类的所有公有成员都会成为派生类的公有成员.受保护的基类成员成为派生类的受保护成员 7.如果基类以private私有被继承,则基类的所有公有成员都会成为派生类的私有成员.基类的受保护成员成为派生类的私有成员. 8.如果基类以protected受保护方式被继承,那么基类的所有公有和受保护成员都会变成派生类的受保护成员.9.不管基类以何种方式被继承,基类的私有成员,仍然保有其私有性,被派生的子类不能访问基类的私有成员.例:继承中的访问权限关系 class A{int a;protected:int b;public:int c;A(){a=b=c=1;}}; //类B以公有方式从基类A继承 class B:public A {public: int d; B(){//a=2; //错误,不能访问基类中的私有成员 b=2; //正确,可以在类中访问基类中的受保护成员,但类的对象不能访问,基类中的受保护成员b在类B中仍然是受保护成员c=d=2;} };//基类中的公有成员c在类B中仍然是公有成员 //以受保护和私有方式从基类A继承。 class C:protected A{public: int e;C(){//a=3; //错误,不能访问基类中的私有成员 b=c=e=3; }};//这里基类受保护成员b和公有成员c都成为类C中的受保护成员。 class D:private A {public: D(){b=c=4;} };//基类中的公有和受保护成员都成为了类D中的私有成员。 //验证受保护和私有方式继承的访问权限。 class C1:public C {public: C1(){b=c=e=4;} };//正确;类A中的成员b和c在类C中是以受保护方式被继承的,b和c都成为了类C中的受保护成员。 class D1:public D {public:D1(){//b=5; //错误,在A中受保护的成员b在类D中是以私有方式继承的,这样b就成为了类D中的私有成员,所以无法访问。

实验九 多态性与虚函数

实验九多态性与虚函数 一、实验要求 1.领悟面向对象编程技术的多态性特征。 2.熟练掌握虚函数的设计和使用。 二、实验内容 1.定义一个类A,有两个add成员函数,参数是数字类型,就为加法;参数是字符类型,就为字符转化为字符串,并实现连接,请用程序实现。 2. 有一个汽车类vehicle,将它作为基类派生类小车类car、卡车类truck和轮船类boat,定义这些类并定义一个虚函数用来显示各类信息。 三、实验小结 #include using namespace std; class vehicle { public: virtual void pr() {cout<<"this is a vehicle"<

{cout<<"this is a truck"<pr(); vehicle *p2 = new truck; p2->pr(); vehicle *p3 = new boat; p3->pr(); vehicle *p4 = new vehicle; p4->pr(); delete p1; delete p2; delete p3; delete p4; }

实验十多态性—虚函数的应用 - 参考答案

实验十多态性—虚函数的应用10.1 实验目的 1.理解和掌握虚函数的作用; 2.掌握利用虚函数实现C++的运行时多态性; 3.理解纯虚类和抽象类。 10.2 实验内容 10.2.1程序阅读 1.理解下面的程序,并运行查看结果,回答程序后面的问题。 #include using namespace std; class Point { public: Point(double i,double j) { x=i; y=j; } double Area() const{return 0;} private: double x,y; }; class Circle:public Point { public: Circle(double i,double j,double k); double Area() const {return 3.14*r*r;} private: double r; }; Circle::Circle(double i,double j,double k):Point(i,j) { r=k; }

void fun(Point &s) { cout< using namespace std; class A { public: virtual void f(void) { cout<<"f function of class A is called! \n"; } }; class B:public A { public: void f(void) { cout<< "f function of class B is called! \n"; } }; class C:public B { public: void f(void) { cout<< "f function of class C is called! \n"; }

相关文档
最新文档