类的继承、派生、多态性C++课程实验报告
c++继承实验报告
c++继承实验报告一、实验目的通过本次实验,我们的目的是深入了解C++中的继承概念及其运用,了解C++中的多态及其实现。
二、实验内容本次实验的主要内容是:1. 完成一个基类Animal和两个派生类Cat、Dog,实现不同动物的基本属性,如年龄、体重、颜色等。
2. 完成一个动物园类Zoo,该类包含了一个动物园实例的属性,如名称和所含动物的数量,该类还能展示动物园里的所有动物的信息,如年龄、体重、颜色等。
3. 基于上述,实现两个派生类WildZoo和PetZoo,其中WildZoo的动物全是野生动物,而PetZoo的动物全是宠物动物。
4. 扩展以上功能,实现运算符重载,比较两个动物园中的动物的数量。
5. 扩展以上功能,实现动物类中的虚函数和多态,并在动物园类中调用虚函数。
三、实验设计1. Animal类设计Animal类作为基类,主要实现各种动物的基本属性,如样例代码:```c++class Animal{public:Animal(int age, float weight, string color);virtual void sound();private:int m_age;float m_weight;string m_color;};```在此基础上,两个派生类Cat和Dog重写了sound方法,使其发出“喵喵”和“汪汪”声。
如样例代码:2. Zoo类设计Zoo类作为实现动物园概念的类,需要包含有关动物园的各种属性、方法。
具体要求如下:(1)基于Animal类创建动物园中所有动物的实例。
(2)实现对动物园中所有动物信息的显示功能。
具体实现如下所示:```c++class Zoo{public:Zoo(string name);~Zoo();};```可以看到,该类中实现了添加动物的方法addAnimal、动物信息的展示方法showInfo、获取动物数量的方法getAnimalCount、获得园区名称的方法getName、运算符重载功能等。
C++实验报告五--继承与多态性 -
南昌航空大学实验报告2011年11月16号课程名称:面向对象程序设计B 实验名称:继承与多态性班级:姓名:同组人:无指导教师评定: 签名:一、实验目的根据现有类建立新类;学习构造基类和虚函数的用法。
二、实验内容应用VC++6.0的编辑环境构造一个类Jhtx及其派生类,该类主要实现关于几何图形的基本操作。
对于基类“几何图形”,有求面积、求体积的函数(纯虚函数),其派生类圆和矩形主要有初始化(构造函数),求面积,求周长操作,类圆的派生类圆球和圆柱有求表面积、体积操作。
试在主函数中分别定义圆、圆球、圆柱以及矩形的对象,并调用其成员函数实现其相应操作。
三、概要设计要实现的功能:求类圆和矩的面积、周长,求类圆的派生类圆球和圆柱表面积、体积;函数原型:double Ball::GetArea();double Ball::Getvolume();double Circle::GetArea();double Circle::Getperimeter();double Column::GetArea();double Column::Getvolume(); double Rectangle::GetArea(); double Rectangle::Getperimeter(); void Show();四、详细设计定义纯虚函数:virtual double Get_Girth()=0; virtual double Get_Volume()=0;virtual double Get_SurArea()=0; virtual double Get_Area()=0;求圆的面积的操作:double Circle::GetArea(){return M*radiums*radiums;}求圆周长的操作:double Circle::Getperimeter(){return 2*M*radiums;}求球表面积的操作:double Ball::GetArea(){return 4.0*M*radiums*radiums;}求球体积的操作:double Ball::Getvolume(){return 4/3*M*radiums*radiums*radiums;}求圆柱表面积的操作:double Column::GetArea(){return 2*M*(radiums*H+radiums*radiums);}求圆柱体积的操作:double Column::Getvolume(){return M*H*radiums*radiums;}求矩形面积的操作:double Rectangle::GetArea(){return Long*Wide;}求矩形周长的操作:double Rectangle::Getperimeter(){return 2*(Long+Wide);}五、程序调试在函数调试的过程中,出现了以下错误提示信息:1、 error C2470: “Circle”: 看起来像函数定义,但没有参数列表;跳过明显的函数体;原因为在语句“double Circle::GetArea()”将域作用符“::”错写为“:“;经调试无误后,运行的结果为:六、实验总结通过这次的试验,我明显的感觉到自己对这方面的知识掌握的还不够熟练,不能顺利地、流畅地运用这方面的知识,因为我没有在规定的时间内完成程序的设计,课后还是要多复习。
c 继承与派生实验报告
c 继承与派生实验报告
C 继承与派生实验报告
实验目的:通过实验,掌握C语言中继承与派生的概念和使用方法,加深对面向对象编程的理解。
实验内容:在C语言中,继承与派生是面向对象编程中非常重要的概念。
在本次实验中,我们将通过一个简单的例子来演示C语言中的继承与派生的用法。
首先,我们定义一个基类(父类)Person,包括姓名和年龄两个成员变量,以及一个显示信息的成员函数。
然后,我们定义一个派生类(子类)Student,继承自Person类,新增一个成员变量学号,并重写显示信息的成员函数。
在实验中,我们首先创建一个Person对象,设置姓名和年龄,然后调用显示信息函数,观察结果。
接着,我们创建一个Student对象,设置姓名、年龄和学号,再次调用显示信息函数,观察结果。
实验结果:通过实验,我们成功实现了C语言中的继承与派生。
我们发现,通过继承,子类Student可以直接使用父类Person中的成员变量和成员函数,同时可以新增自己的成员变量和函数。
这样的设计使得代码更加简洁和灵活,提高了代码的复用性和可维护性。
结论:C语言中的继承与派生是面向对象编程中非常重要的概念,通过本次实验,我们深入理解了这一概念的用法和意义。
掌握了继承与派生的方法后,我们可以更加灵活地设计和编写程序,提高代码的质量和效率。
总结:通过本次实验,我们对C语言中的继承与派生有了更深入的理解,加深了对面向对象编程的认识。
在今后的学习和工作中,我们将更加灵活地运用继承与派生的方法,提高代码的质量和效率。
C 继承与派生实验报告
C 继承与派生实验报告C 继承与派生实验报告引言:在面向对象的编程中,继承与派生是重要的概念。
通过继承,我们可以从已有的类中派生出新的类,并且可以在新的类中添加额外的属性和方法。
本实验旨在通过实际的编程实践,深入理解C语言中的继承与派生。
实验过程:首先,我们创建了一个基类Animal,其中包含了一个成员变量name和一个成员函数eat。
然后,我们创建了两个派生类Dog和Cat,它们分别继承了Animal类,并且在其中添加了各自特有的成员函数bark和meow。
接着,我们创建了一个对象dog和一个对象cat,并分别调用了它们的成员函数eat、bark 和meow。
实验结果:通过运行程序,我们可以看到dog对象调用了eat和bark函数,而cat对象调用了eat和meow函数。
这说明继承与派生的机制正常工作,派生类可以继承基类的属性和方法,并且可以在派生类中添加新的属性和方法。
实验分析:继承与派生是面向对象编程的重要概念,它可以使得代码的复用性更高,同时也增加了代码的灵活性。
通过继承,派生类可以继承基类的属性和方法,这样可以减少代码的冗余,并且可以在派生类中添加新的功能。
在本实验中,Dog 和Cat类分别继承了Animal类,这样它们就拥有了相同的属性name和方法eat。
然后,通过在派生类中添加新的方法bark和meow,我们可以实现不同的行为。
继承与派生的应用:继承与派生在实际的软件开发中有着广泛的应用。
例如,在一个图形界面程序中,可以定义一个基类Widget,它包含了一些基本的属性和方法,然后可以通过派生类Button和TextBox来创建具体的按钮和文本框。
这样,我们可以通过继承和派生的方式,实现不同的界面元素,并且可以在派生类中添加新的功能,如按钮的点击事件和文本框的输入验证。
继承与派生的注意事项:在使用继承与派生的过程中,我们需要注意一些问题。
首先,派生类可以访问基类的公有成员,但不能访问基类的私有成员。
实验报告5 继承与多态
实验名称:继承与多态一.实验目的:((1)理解继承的含义,掌握派生类的定义方法和实现;(2)理解虚函数在类的继承层次中的作用,虚函数的引入对程序运行时的影响,能够对使用虚函数的简单程序写出程序结果。
(3)编写体现类的继承性(成员变量,成员方法,成员变量隐藏)的程序;(4)编写体现类多态性(成员方法重载,构造方法重载)的程序。
(5)理解接口和抽象类、抽象方法的定义和实现方法;(5)理解接口和抽象类的差别。
二.上机内容:(1)进行类的继承和基类构造方法的应用的练习;(2)进行类的多态性练习(3)进行抽象类和接口的练习(4)整理上机步骤,总结经验和体会。
(5)完成实验报告。
三.上机步骤:类的继承和基类构造方法的应用(1)编写一个学生和教师数据输入和显示程序,学生数据有编号、姓名、班级和成绩,教师数据有编号、姓名、职称和部门。
要求将编号、姓名输入和显示设计成一个类person,并作为学生数据操作类student和教师类数据操作类teacher的基类。
using System;using System.Collections.Generic;using System.Text;namespace ConsoleApplication2{class person{public string bh;//编号public string xm;//姓名public person(string bh, string xm){this.bh = bh;this.xm = xm;}public void show(){Console.WriteLine("姓名:{0}", xm);Console.WriteLine("编号:{0}", bh);}}class student : person{public string bj;//班级public int cj;//成绩public student(string sbh, string sxm, string sbj, int scj): base(sbh, sxm){bh = sbh;xm = sxm;bj = sbj;cj = scj;}public new void show(){Console.WriteLine("***student***");Console.WriteLine("姓名:{0}", xm);Console.WriteLine("编号:{0}", bh);Console.WriteLine("班级:{0}", bj);Console.WriteLine("成绩:{0}", cj);}}class teacher : person{public string zc;//职称public string bm;//部门public teacher(string tbh, string txm, string tzc, string tbm) : base(tbh, txm){bh = tbh;xm = txm;zc = tzc;bm = tbm;}public new void show(){Console.WriteLine("***teacher***");Console.WriteLine("姓名:{0}", xm);Console.WriteLine("编号:{0}", bh);Console.WriteLine("职称:{0}", zc);Console.WriteLine("部门:{0}", bm);}}class program{static void Main(string[] args){student st = new student("050013", "张三", "信管091", 91);st.show();teacher te = new teacher("046950", "范仲淹", "特级教师", "教务处"); te.show();Console.ReadLine();}}}运行结果:(2)将以上程序尝试改成通过调用基类构造方法的方式来初始化编号和姓名,并总结调用基类构造方法的应用要点。
c派生类与继承实验报告
实验2 派生类与继承实验课程名:面向对象程序设计(C++)专业班级:学号::实验时间:实验地点:指导教师:二、实验内容一、构造一个类Geometry 及其派生类,该类主要实现关于几何图形的基本操作。
对于基类“几何图形”,有求面积、求体积的函数(纯虚函数),其派生类圆和矩形主要有初始化(构造函数),求面积,求周长操作,类圆的派生类圆球和圆柱有求表面积、体积操作。
试在主函数中分别定义圆、圆球、圆柱以及矩形的对象,并调用其成员函数实现其相应操作。
实验代码如下:#include<iostream>using namespace std;class Geometry{public:CircleradiumsCircle()~Circle() BallBall()~Ball() GeometryGeometry()~Geometry()GetArea()GetPerimeter()Getcolume()show()Column Column()~Column()Rectangle Rectangle() ~Rectangle()Column column(1,2,3);column.show();return 0;}运行结果:代码分析:1)首先定义基类Geometry,在定义基类的派生类Circle,Rectangle再定义以Circle,Rectangle为基类的派生类Column,以及以Circle为基类的派生类Ball;2)在定义派生类时用构造函数初始化私有成员;3)最后用类的对象来调用类函数;二、设计如下类:(1)建立一个Point类,表示平面中的一个点;建立一个Line类,表示平面中的一条线端,内含两个Point类的对象;建立Triangle类,表示一个三角形,内含三个Line类的对象构成一个三角形。
(2)设计三个类的相应的构造函数、复制构造函数,完成初始化和对象复制(3)设计Triangle类的成员函数完成三条边是否能构成三角形的检验和三角形面积计算,面积显示。
类的继承与多态性实验报告
类的继承与多态性实验报告类的继承与多态性实验报告目录1.介绍2.什么是多态3.多态在Java中的技术基础4.示例5.多态的好处6.总结介绍之前的文章介绍过类的封装性和继承性,现在是时候聊聊面向对象编程的三大特性之一的最后一个类的多态性了。
多态的基础是继承(包括了接口的实现)和方法的覆盖。
什么是多态多态对应的英文单词是polymorphism ,百度翻译给出的翻译是:n.多型现象,多态性;多机组合形式;按字面意思就是多种状态、形态、姿态等等,潜台词就是某个东西具有多种状态、形态、姿态等等。
那是什么东西呢?在面向对象的编程语言里面(当然就包括Java 了)就是某个方法或函数。
那方法的多种状态、形态、姿态有是个什么意思呢?这其实是指同一个方法具有多个方法体,就是方法的实现。
而方法的相同与否是由方法签名决定的。
所以,多态其实本质上是指同一个类的同一个方法却具有不同的行为特征。
状态、形态、姿态指的就是行为特征。
多态在Java中的技术基础然而,在Java中,同一个类里面是不可能存在两个签名相同而实现不同的方法的,否则的话会导致无法判断该执行哪个方法,因此在编译时就会报错。
所以,肯定是在两个类中才有可能存在两个签名相同而实现不同的方法,一个实现在这个类,另一个实现在另一个类。
而如果这两个类毫无瓜葛,那么肯定就与多态的本质(同一个类的同一个方法却具有不同的行为特征)自相矛盾了。
所以,这两个类肯定是有某种联系的。
我们再想想,什么概念是能够让两个不同的类却又能称为同一个类的? 答案就是类的继承/扩展,就是现实中的“某东西是某类东西”的概念,就是“具体和抽象”的思想。
比如,男人是人,女人也是人,男人类和女人类就借助于人类建立了某种联系,而人类具有的某个行为在男人类和女人类中是有着不同体现的,比如人类的吃饭这个行为,男人类的体现是狼吞虎咽,女人类的体现是细嚼慢咽。
例子不是很恰当,但意思就是这么个意思。
所以说,Java里面多态的技术基础就是方法的覆盖,当然,在Java中覆盖不仅仅发生在类的继承/扩展上,还可能发生在接口的实现上。
实验二类的继承与派生
实验二类的继承与派生实验二类的继承与派生一、实验目的1. 掌握类的声明和使用。
2. 掌握对象的声明和使用。
3. 掌握具有不同访问属性的成员的访问方式。
4. 观察构造函数和析构函数的执行过程。
5. 学习声明和使用类的继承关系,声明派生类;6. 熟悉不同继承方式下对基类成员的访问控制;二.实验内容1. 设计一个用于人事管理的People(人员)类。
考虑到通用性,这里只抽象出所有类型人员都具有的属性:number(编号)、sex (性别)、birthday(出生日期)、id(身份证号)等等。
具有的属性如下:姓名char name[11]、编号char number[7]、性别char sex[3]、生日birthday、身份证号charid[20]。
其中“出生日期”声明为一个“日期”类内嵌子对象。
用成员函数实现对人员信息的录入和显示。
要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、组合。
在测试程序中声明people 类的对象数组,录入数据并显示。
2. 从people(人员)类派生出student(学生)类,添加属性:班号char classNO[7];从people 类派生出teacher(教师)类,添加属性:职务char pship[11]、部门char departt[21]。
从student 类中派生出graduate(研究生)类,添加属性:专业char subject[21]、导师teacher adviser;从graduate 类和teacher 类派生出TA(助教博士生)类,重载相应的成员函数,测试这些类。
三 . 实验步骤1.程序代码第一题#include#includeusing namespace std;class Date //日期类{private:int year;int month;int day;public:Date(){} //默认构造Date(int y,int m,int d) //带参构造{year=y;month=m;day=d;}void set() //设置数据函数{cin>>year>>month>>day;}void display() //显示函数{cout<<year<<"年"<<month<<"月"<<day<<"日";< bdsfid="103" p=""></year<<"年"<<month<<"月"<<day<<"日";<>}};class Person //人员类{private:string name;int num;char sex;Date birthday;char ID[18];public:Person(){} //默认构造Person(int n,int y,int m,int d,char id[18],char s='m'):birthday(y,m,d) {num=n;sex=s;strcpy(ID,id);} //有默认值的带参构造Person(Person& p) //拷贝构造{ name=;num=p.num;sex=p.sex;birthday=p.birthday;strcpy(ID,p.ID);}void input() //输入函数{cout<<"录入数据:"<<endl;< bdsfid="131" p=""></endl;<> cout<<"姓名:";cin>>name;cout<<"编号:";cin>>num;cout<<"性别(m/f):";cin>>sex;cout<<"生日:";birthday.set();cout<<"身份证号:";cin>>ID;ID[18]='\0';cout<<endl;< bdsfid="144" p=""></endl;<>}void output() //输出函数{cout<<"编号:"<<num<<endl;< bdsfid="149" p=""></num<<endl;<>cout<<"姓名:"<<name<<endl;< bdsfid="151" p=""></name<<endl;<>cout<<"性别:"<<sex<<endl;< bdsfid="153" p=""></sex<<endl;<>cout<<"生日:";birthday.display();cout<<endl;< bdsfid="157" p=""></endl;<>cout<<"身份证号:"<<id<<endl;< bdsfid="159" p=""></id<<endl;<>}~Person() //析构函数{cout<<" "<<num<<"号人员已经录入"<<=""></num<<"号人员已经录入"<};int main(){Person p1;p1.input();p1.output();return 0;}第二题#include#includeusing namespace std;class Date //日期类{private:int year;int month;int day;public:Date(){} //默认构造Date(int y,int m,int d) //带参构造{year=y;month=m;day=d;}void set() //设置数据函数{cin>>year>>month>>day;}void display() //显示函数{cout<<year<<"年"<<month<<"月"<<day<<"日";< bdsfid="200" p=""></year<<"年"<<month<<"月"<<day<<"日";<>}};class Person //人员类{private:string name;int num;char sex[10];Date birthday;char ID[18];public:Person(){} //默认构造Person(int n,int y,int m,int d,char id[18],char sex[10]):birthday(y,m,d) {num=n;strcpy(ID,id);} //有默认值的带参构造Person(Person& p) //拷贝构造{ name=;num=p.num;birthday=p.birthday;strcpy(ID,p.ID);}void input() //输入函数{cout<<"姓名:";cin>>name;cout<<"编号:";cin>>num;cout<<"性别(男/女):";cin>>sex;cout<<"生日:";birthday.set();cout<<"身份证号:";cin>>ID;ID[18]='\0';cout<<endl;< bdsfid="237" p=""></endl;<>}void output() //输出函数{cout<<"编号:"<<num<<endl;< bdsfid="242" p=""></num<<endl;<>cout<<"姓名:"<<name<<endl;< bdsfid="244" p=""></name<<endl;<>cout<<"性别:"<<sex<<endl;< bdsfid="246" p=""></sex<<endl;<>cout<<"生日:";birthday.display();cout<<endl;< bdsfid="250" p=""></endl;<>cout<<"身份证号:"<<id<<endl;< bdsfid="252" p=""></id<<endl;<>}~Person() //析构函数{//cout<<" "<<num<<"号人员已经录入"<<=""></num<<"号人员已经录入"<};class stduent:public Person{char classno[7];public: student(){cout<<"*************"<<="">void input(){Person::input();cout<<"输入学号"<<endl;< bdsfid="269" p=""></endl;<>cin>>classno;}void getno(){Person::output();cout<<"学号为:"<<classno<<endl;< bdsfid="275" p=""></classno<<endl;<>}};class teacher:public Person{char pship[11],departt[21];public :teacher(){cout<<"***********"<<endl;}< bdsfid="283" p=""></endl;}<> void input(){Person::input();cout<<"输入职务"<<endl;< bdsfid="288" p=""></endl;<>cin>>pship;cout<<"输入部门"<<endl;< bdsfid="291" p=""></endl;<>cin>>departt;}void inputt(){cout<<"输入职务"<<endl;< bdsfid="297" p=""></endl;<>cin>>pship;cout<<"输入部门"<<endl;< bdsfid="300" p=""></endl;<>cin>>departt;}void getno(){Person::output();cout<<"职务为:"<<pship<<endl;< bdsfid="306" p=""></pship<<endl;<>cout<<"部门为:"<<departt<<endl;< bdsfid="308" p=""></departt<<endl;<>}void output (){cout<<"职务为:"<<pship<<endl;< bdsfid="313" p=""></pship<<endl;<>cout<<"部门为:"<<departt<<endl;< bdsfid="315" p=""></departt<<endl;<>}};class graduate:public stduent{char subject[21], adviser[21];public :graduate(){cout<<""<<endl;< bdsfid="323" p=""></endl;<>}void input(){stduent::input();cout<<"输入专业:"<<endl;< bdsfid="329" p=""></endl;<> cin>>subject;cout<<"输入导师:"<<endl;< bdsfid="332" p=""></endl;<>cin>>adviser;}void getno(){ stduent::getno();cout<<"专业为:"<<subject<<endl;< bdsfid="338" p=""></subject<<endl;<>cout<<"导师为:"<<adviser<<endl;< bdsfid="340" p=""></adviser<<endl;<>}};class TA :public graduate,teacher{public :TA(){}void input(){graduate::input();teacher::inputt();}void getno(){graduate::getno();teacher::output();}};int main(){Person p1;stduent s;teacher t;graduate g;TA T;cout<<"请依次输入人员数据信息"<<endl;< bdsfid="366" p=""></endl;<>p1.input();cout<<"请输入学生数据信息";s.input();cout<<"请输入老师数据信息";t.input();cout<<"请输入研究生数据信息";g.input();cout<<"请输入助教博士数据信息";T.input();cout<<"人员数据信息为:";p1.output();cout<<"学生数据信息为:";s.getno();cout<<"老师信息为:";t.getno();cout<<"研究生信息为:";g.getno();cout<<"助教博士信息为:"T.getno();}2.调试程序第一次调试,发现没有名字的显示。
实验报告-类的派生与继承
return 0;
}
4.模拟银行ATM终端系统,ATM机上可以使用储蓄卡和信用卡。储蓄卡有存钱、取钱、查询余额、修改密码等功能。信用卡有存钱、查询额度、查询本期账单金额、查询未出账单总金额、修改密码等功能。请用面向对象方法编程实现上述功能。
#include<iostream>
{
return weight;
}
void setWheels(int ws)
{
wheels = ws;
}
void setWeight(float wt)
{
weight = wt;
}
void display()
{
cout << "车轮数:" << wheels << "汽车承重:" << weight << endl;
cout << "请输入部门:";
cin >> bumen;
}
void display()
{
user::display();
cout << " 职称:" << zhicheng << " 部门:" << bumen << endl;
}
private:
char zhicheng[20];
char bumen[20];
cin >> hour;
sumsalary = salary + 5 * hour;
}
void display()
实验报告模版
实验4 派生类的实现姓名张识翼班级电信3班学号14132201576一、实验目的通过vc开发环境下派生类和对象的设计与实现,了解单继承和多继承的基本方法,掌握派生类的基本设计和编程方法。
二、实验主要内容1、采用单一继承实现学生和毕业生两个类,设计相关的数据成员和函数,编程测试继承情况。
2、单位员工类(时薪工、计件工、经理、佣金工)设计,其中时薪工每周超过50小时后算加班,加班薪水为原薪水的200%;佣金工每周得到保底薪水,再此基础上按比例从该周内销售额中提成;经理则拿固定的周薪。
3、设计研究生类,该类派生自学生类和教师类。
三、实验程序#include<iostream.h>#include<string.h>class Student // 定义基类vehicle{public: // 公有函数成员Student(int n,char *na,int g):number(n),grade(g){strcpy(name,na);}int getNumber(){return number;}char * getName(){return name;}int getGrade(){return grade;}void display(){cout<<"学号:"<<number<<endl<<"姓名:"<<name<<endl<<"年级:"<<grade<<endl;}private: // 私有数据成员int number; // 学号char name[20]; // 姓名int grade; // 年级};class Graduate:public Student //定义毕业生类{char designSubject[20];public:Graduate(int n,char *na,char * deSub,int g=4):Student(n,na,g){strcpy(designSubject,deSub);}void display(){Student::display();cout<<"设计题目:"<<designSubject<<endl;}};void main() //创建对象{Student li(2,"Li Ming",3);Graduate zhang(3,"Zhang Gang","学生成绩管理系统"); // 显示对象的相关信息li.display(); cout << endl<<"-----------------------------------" <<endl;zhang.display();}#include <iostream.h>#include <string.h>class Person{protected:char m_strName[10];int m_nSex;int m_nAge;public:Person(char *name,int age,char sex){strcpy(m_strName, name);m_nSex= (sex=='m'?0:1 );m_nAge = age;}void setName(char *name){strcpy(m_strName, name);}void setSex(int sex){m_nSex= (sex=='m'?0:1 );}void setAge(int age){m_nAge = age;}char * getName(){return m_strName;}int getAge(){return m_nAge;}int getSex(){return m_nSex;}void ShowMe(){cout<<" 姓名:"<<m_strName<<endl;cout<<" 性别:"<<(m_nSex==0?"男":"女")<<endl;cout<<" 年龄:"<<m_nAge<<endl;}};class Teacher : public Person{char m_strDept[20];int m_fSalary;public:Teacher(char *name,int age,char sex,char *dept,int salary):Person(name,age,sex){strcpy(m_strDept, dept);m_fSalary = salary;}void ShowMe(){Person::ShowMe();cout<<" 工作单位:"<<m_strDept<<endl;cout<<" 月薪:"<<m_fSalary<<endl;}void setSalary(int salary){m_fSalary = salary;}char * getDept(){return m_strDept;}int getSalary(){return m_fSalary;}};class Student : public Person{char m_strID[12];char m_strClass[12];public:Student(char *name,int age,char sex,char *ID,char *Class) :Person(name,age,sex){strcpy(m_strID, ID);strcpy(m_strClass, Class);}void ShowMe(){ cout<<" 学号:"<<m_strID<<endl;Person::ShowMe();cout<<" 班级:"<<m_strClass<<"\n";}void setID(char * ID){strcpy(m_strID, ID);}void setClass(char *Class){strcpy(m_strClass, Class);}char* getID(){return m_strID;}char* getClass(){return m_strClass;}};class Master:public Student, public Teacher{public:Master(char *name,int age,char sex,char *ID,char *Class,char *dept,int salary) :Student(name,age,sex,ID,Class),Teacher(name, age, sex, dept, salary){}void ShowMe(){Student::ShowMe();cout<<" 工作单位:"<<getDept()<<endl;cout<<" 月薪:"<<getSalary()<<endl;}};void main(){ // 定义三个不同类的对象Teacher teacher1("刘馨",38,'m',"计算机系",3800);Student std1("刘丽",20,'f',"03016003","计算机03");Master master("张鑫",25,'f',"003","机械052","机械系",1000);//显示各类人员的属性teacher1.ShowMe();cout<<"--------------------"<<endl;std1.ShowMe();cout<<"--------------------"<<endl; master.ShowMe();}#include<iostream>#include<string.h>using namespace std;class employee //员工类{protected:char name[20]; //员工名字char id[20]; //员工号double salary; //员工薪水public:employee(){};employee(char* emp_name,char* emp_id) //建立员工基本信息{strcpy(name,emp_name);strcpy(id,emp_id);}char* get_name() //获取名字{return name;}char* get_id() //获取职工号{return id;}double get_salary() //应得薪水{return salary;}};class hourlyworker:public employee //时薪工类{protected:int hours;double hourpay;public:hourlyworker(){};hourlyworker(char* hour_name,char* hour_id,int hour,double pay):employee(hour_name,hour_id){hours=hour; hourpay=pay;}char *get_name(){return employee::get_name ();}char *id(){return employee::get_id ();}int get_hours() //获取工作时间{return hours;}double get_hourpay() //获取小时工资{return hourpay;}double get_salary() //时薪工工资计算{if(hours<=50)salary=hourpay*hours;elsesalary=hourpay*50+2*hourpay*(hours-50);return salary;}};class pieceworker:public employee //计件工类{protected:int pieces; //工件数double piecepay; //每个工件赢得的工资public:pieceworker(){};pieceworker(char* piece_name,char* piece_id,int piece,double piece_pay): employee(piece_name,piece_id){pieces=piece; piecepay=piece_pay;}char *get_name(){return employee::get_name ();}char *id(){return employee::get_id ();}int get_pieces() //获取工件数{return pieces;}double get_pay() //每件的工资{return piecepay;double piece_salary() //计件工工资{salary=pieces*piecepay;return salary;}};class manager:public employee{public:manager(char* man_name,char* man_id):employee(man_name,man_id){}char *get_name(){return employee::get_name ();}char *id(){return employee::get_id ();}double manager_salary() //经理工资{return salary=3000;}};class commissionworker:public employee //佣金工类{protected:double basesalary; //保底新书double total; //一周内的销售总额double percent; //提成的额度public:commissionworker(){};commissionworker(char* com_name,char* com_id,double com_basesalary,double com_total,double com_percent): employee(com_name,com_id){basesalary=com_basesalary;total=com_total;percent=com_percent;}char *get_name(){return employee::get_name ();char *id(){return employee::get_id ();}double get_base_pay() //保底薪水{return basesalary;}double get_com_total() //销售总额{return total;}double get_com_percent() //销售额中提成{return percent;}double com_salary() //佣金工的工资{salary=basesalary+total*percent;return salary;}};void main(){cout<<"输出“时薪工”的相关信息:"<<"\n";hourlyworker hworker("John","000001",65,20.5);cout<<" hourlyworker'名字: "<<hworker.get_name ()<<"\n";cout<<" hourlyworker'职工号: "<<hworker.get_id ()<<"\n";cout<<" hourlyworker'工作小时数:"<<hworker.get_hours ()<<"\n";cout<<" hourlyworker'每小时金额:"<<hworker.get_hourpay ()<<"\n";cout<<" hourlyworker'总工资: "<<hworker.get_salary ()<<"\n";cout<<"**********************************************"<<"\n";cout<<"输出“计件工”的相关信息:"<<"\n";pieceworker pworker("Tom","000002",100,25.5);cout<<" pieceworker'名字: "<<pworker.get_name ()<<"\n";cout<<" pieceworker'职工号: "<<pworker.get_id ()<<"\n";cout<<" pieceworker'工件数: "<<pworker.get_pieces ()<<"\n";cout<<" pieceworker'每件的金额:"<<pworker.get_pay ()<<"\n";cout<<" pieceworker'总工资: "<<pworker.piece_salary ()<<"\n";cout<<"**********************************************"<<"\n";cout<<"输出“经理”的相关信息:"<<"\n"; manager manag("Jack","000003");cout<<" manager'名字: "<<manag.get_name ()<<"\n";cout<<" manager'职工号:"<<manag.get_id ()<<"\n";cout<<" manager'总工资:"<<manag.manager_salary ()<<"\n";cout<<"**********************************************"<<"\n";cout<<"输出“佣金工”的相关信息:"<<"\n";commissionworker cworker("Jim","000004",500,234.6,0.01);cout<<" commissionworker'名字: "<<cworker.get_name ()<<"\n";cout<<" commissionworker'职工号: "<<cworker.get_id ()<<"\n";cout<<" commissionworker'保底工资:"<<cworker.get_base_pay ()<<"\n";cout<<" commissionworker'销售额: "<<cworker.get_com_total ()<<"\n";cout<<" commissionworker'提成额度:"<<cworker.get_com_percent ()<<"\n";cout<<" commissionworker'总工资: "<<_salary ()<<"\n";cout<<"**********************************************"<<"\n";}四、实验结果五、实验总结实验四比较贴近生活的实际问题,在我写这些程序时候参考了书上的例子。
C++继承与派生实验报告
C++继承与派生实验报告应用数学学院信息与计算科学(信息计算)专业1 班、学号3111008106姓名吴伟栓教师评定_________________实验题目继承与派生一、实验目的与任务实验目的:(1)学习声明和使用类的继承关系,声明派生类。
(2)熟悉不同继承方式下对基类成员的访问控制。
(3)学习利用虚基类解决二义性问题。
实验任务:(1)声明一个基类Animal,有私有整型成员变量age,构造其派生类dog,在其成员函数SetAge(int n)中直接给age赋值,看看会有什么问题,把age改为公有成员变量,还会有问题吗?编程试试看。
(2)声明一个基类BaseClass,有整形成员变量Number,构造其派生类DerivedClass,观察构造函数和析构函数的执行情况。
(3)声明一个车(vehicle)基类,具有MaxSpeed,Weight等成员变量,Run,Stop 等成员函数,由此派生出自行车(bicycle)类,汽车(motorcar)类。
自行车(bicycle)类有高度(Height)等属性,汽车(motorcar)类有座位数(SeatNum)等属性。
从bicycle 和motorcar派生出摩托车(motocycle)类,在继承过程中,注意把vehicle设置为虚基类。
如果不把vehicle设置为虚基类,会有什么问题?编程试试看。
(4)(选做)从实验六中的people(人员)类派生出student(学生)类,添加属性:班号char classNo[7];从people类派生出teacher(教师)类,添加属性:职务char principalship[11]、部门char department[21]。
从student类中派生出graduate(研究生)类,添加属性:专业char subject[21]、导师teacherradviser;从graduate类和teacher 类派生出TA(助教生)类,注意虚基类的使用。
类的继承、派生、多态性C++课程实验报告
(2)具体要求
1,bicycle和motorcar虚拟继承于vehicle;
2,vehicle中申明数据成员表示:最高时速和重量;成员函数:Run和Stop用于实现车辆的启动和停止,这两个函数申明为虚拟函数;
3,bicycle、motorcar和motorcycle重载虚函数Run和Stop
3,主函数:申明基类指针,通过基类指针指向派生类指针来实现多态性和动态绑定。
实验内容
实验程序设计如下:
#include<iostream>
using namespace std;
/*定义vehicle类*/
class vehicle
{
public:
virtual void Run(){cout<<"A vehicle is running!"<<endl;}
C++第五次实验
学生姓名
xxx
班级
雷电091
学号
xxxxxxxxxx
实验项目
实验五类继承、派生、多态性
指导教师
杜之波
实验目的和要求
一、实验目的
(1)掌握类的继承与派生;
(2)学会类的虚拟继承避免多重派生的歧义性;
(3)掌握通过虚函数实现多态性的方法;
(4)掌握动态绑定的技术。
二、实验内容
编写如下要求的完整程序:动态绑定
这个实验让我对实现动态绑定的技术有了更多的了解。
教师签字
签字日期
2011年6月20
ptr=&a3;
display(ptr);
ptr=&a4;
display(ptr);
C 继承与派生实验报告
C 继承与派生实验报告1. 引言继承与派生是面向对象编程中的基本概念之一,C语言作为一门面向过程的编程语言,也支持继承与派生的概念。
本实验旨在通过编写代码演示C语言中的继承与派生的使用方法,加深对这一概念的理解。
2. 继承与派生的概念继承是一种面向对象编程中的重要概念,通过继承,派生类可以继承基类的属性和方法。
在C语言中,继承是通过结构体嵌套的方式实现的。
派生是继承的一种特殊形式,通过派生,派生类可以在基类的基础上增加新的属性和方法。
3. 实验步骤步骤一:定义基类首先,我们需要定义一个基类,基类包含一些公共的属性和方法。
在C语言中,我们可以使用结构体来定义类。
typedef struct {int x;int y;} Point;上述代码定义了一个名为Point的结构体,它包含了两个整型属性x和y。
这个结构体可以看作是基类。
步骤二:定义派生类接下来,我们可以定义派生类,派生类通过嵌套包含基类的结构体来实现继承。
typedef struct {Point base; // 基类结构体int z; // 派生类自己的属性} Point3D;上述代码定义了一个名为Point3D的结构体,它嵌套包含了基类Point的结构体,并新增了一个整型属性z。
这个结构体可以看作是派生类。
步骤三:使用派生类在定义好派生类后,我们可以使用派生类来创建对象,并调用基类的属性和方法。
int main() {// 创建对象Point3D point3d;point3d.base.x = 1;point3d.base.y = 2;point3d.z = 3;// 调用基类属性printf("x: %d\n", point3d.base.x);printf("y: %d\n", point3d.base.y);// 调用派生类自己的属性printf("z: %d\n", point3d.z);return0;}上述代码示例了如何使用派生类创建对象,并访问基类的属性和派生类自己的属性。
[C++]继承和派生实验报告
运行结果:修改过后的程序代码如下:#include <iostream>#include <cstring>using namespace std;class Person{private: char m_strName[20];int m_nAge;int m_nSex;public: Person();//构造函数Person( char *name, int age, char sex ); //构造函数Person( const Person &p ); //拷贝构造函数~Person() //析构函数{cout<<"Now destroying the instance of Person"<<endl;}void SetName( char *name );void SetAge( int age );void setSex( char sex );char* GetName();运行结果:2. 程序的类结构图为:A-x:int+A()+A( int m ) : x( m )+~A()B-A a-y:int+B()+B( int m, int n, int l ) : A( m ), a( n ),y( l )+~B()运行结果:3.程序的类结构图为:Person#m_name[20]:char#m_age:int#m_sex:char+Person()+information(char* name,int age,char sex):void+~Person()Teacher#major[20]: char#position[20]: char#course[20]: char+m_major(char* m): void+m_position(char* p):void+m_course(char* c): voidcout<<'['<<x_size<<","<<y_size<<']'<<", "<<'['<<i_size<<","<<j_size<<']'; }int main(){Circle1 circle(0.0,0.0,3.0);circle.area();circle.perimeter();circle.print();cout<<"\n";Square1 square(0.0,0.0,3.0,3.0);square.area();square.perimeter();square.print();cout<<"\n";cout<<"圆的面积为:"<<circle.area()<<endl;cout<<"圆的周长为:"<<circle.perimeter()<<endl;cout<<"圆的圆心坐标和半径为:";circle.print();cout<<"\n\n";cout<<"正方形的面积为:"<<square.area()<<endl;cout<<"正方形的周长为:"<<square.perimeter()<<endl;cout<<"正方形的中心坐标和一个顶点坐标分别为:";square.print();cout<<"\n";return 0;}运行结果:。
C++类的继承与派生 实验报告
Guangxi University of Science and Technology实验报告实验课程: C++程序设计教程实验内容:类的继承与派生院(系):专业:班级:学生姓名:学号:指导教师:2013年 11 月 11日一.实验目的:1、掌握利用单继承和多继承的方式定义派生类的方法。
2、深刻理解在各种继承方式下构造函数和析构函数的执行顺序。
3、理解和掌握公有继承、私有继承和保护继承对基类成员的访问机制。
4、理解虚基类的目的和作用。
二.实验内容(-)实验题目一:声明一个圆类作为基类,含成员数据半径R;有成员函数:构造函数实现对基类成员数据的初始化、计算圆面积的成员函数、输出的成员函数,要求输出圆半径R。
把圆类作为基类,通过公有继承,派生圆柱体类,派生类新增成员数据有高(H);新增成员函数有构造函数、计算圆柱体体积的函数、输出所有成员的函数。
main()完成派生类对象的定义和相关函数的测试。
2.程序源代码:#include<iostream>using namespace std;class round{public:round(float m){rad=m;}float space(){sp=3.14*rad*rad;return sp;}void display(){cout<<"the round of information"<<endl;cout<<"该圆半径: "<<rad<<endl;cout<<"该圆面积: "<<space()<<endl;}protected:float rad;float sp;};class cylinder: public round{public:cylinder(float m,float n):round(m){high=n;}void gethigh(float n){high=n;}float room(){bulk=3.14*rad*rad*high;return bulk;}void play(){cout<<"the cylinder of information:"<<endl;cout<<"该圆柱高: "<<high<<endl;cout<<"该圆柱体积: "<<room()<<endl;}protected:float high;float bulk;};int main(){float m,n;cout<<"输入该圆半径:"; cin>>m;cout<<"输入该圆柱高:";cin>>n;cylinder ss(m,n);ss.display();ss.play();}3.实验结果:(二)实验题目二:声明一个学生类,有成员函数:学号、姓名、性别、年龄,要求有如下成员函数:构造函数,输出所有成员的函数。
C++实验报告--继承和派生
}
void show(){
Person::show();
cout<<"Teacher lesson:"<<lesson<<endl;
}
};
class Student:virtual public Person{
private:
{
cout<<"constructing...."<<endl;
}
void show(){
cout<<"YJSZJ:"<<endl;
Teacher::show();
Student::show();
}
};
void main(){
YJSZJ x(21,50,98.0,99.0,97.0,5000,02);
}
void show_biaomianji()
{
cout<<"表面积:"<< "2*(A*B+A*H+B*H)= "<<2*(A*B+A*H+B*H)<<" (cm2)"<<endl;;
}
};
void main(){
Point C(6,8),D(3,4);
C.showXY();
D.showXY();
int H;
public:
Cuboid(int H,int A,int B,int X,int Y):Rectangle(A,B,X,Y)
C 继承与派生实验报告
C 继承与派生实验报告C 继承与派生实验报告引言:在计算机编程领域,继承与派生是一种重要的概念。
通过继承,我们可以构建更加复杂和灵活的程序结构,提高代码的可重用性和可维护性。
本实验旨在通过实际操作和分析,深入理解C语言中继承与派生的原理和应用。
实验目的:1. 理解继承与派生的概念和原理;2. 掌握C语言中继承与派生的语法和用法;3. 实践继承与派生的应用,加深对其理解。
实验步骤:1. 创建基类和派生类:首先,我们创建一个基类Animal,其中包含一个成员函数eat()和一个成员变量name。
然后,我们创建一个派生类Dog,继承自基类Animal,并添加一个成员函数bark()和一个成员变量breed。
2. 实现继承与派生的功能:在基类Animal中,实现成员函数eat(),用于输出动物的进食行为。
在派生类Dog中,实现成员函数bark(),用于输出狗的吠叫行为。
同时,通过继承,派生类Dog可以直接访问基类Animal中的成员变量name。
3. 测试继承与派生的效果:在主函数中,创建一个Dog对象,并调用其成员函数eat()和bark(),以验证继承与派生的功能是否正常工作。
同时,可以通过修改派生类Dog的成员变量breed,观察其对程序运行结果的影响。
实验结果与分析:通过实验,我们可以发现继承与派生的强大功能。
基类Animal提供了一种通用的行为eat(),而派生类Dog则通过添加成员函数bark(),实现了更加具体和特定的行为。
这种继承与派生的关系,使得我们可以在保留原有功能的基础上,进行灵活的扩展和定制。
此外,通过继承,派生类Dog可以直接访问基类Animal中的成员变量name。
这种继承的特性,使得派生类可以共享基类的数据,避免了重复定义和冗余代码的问题。
同时,通过修改派生类Dog的成员变量breed,我们可以看到其对程序运行结果的影响。
这种灵活性,使得我们可以根据具体需求,定制不同的派生类,实现更加个性化的功能。
C++实验报告 继承与多态
四、实验结果分析及总结(对实验的结果是否达到预得派生类中不曾定义过的成员,提高了编程效率; 2)继承与派生分为共有、私有、保护三种继承方式,其中共有使用最广泛,
它使得派生类与基类中的成员具有相同的属性。 3)多重继承存在有二义性,用虚基类能有效解决这一问题。 4)除了继承还有组合关系,及在一个类中定义另一个类的对象,此时初始化时要用对象名 来调用初始化函数。调用对应的函数时,要用对象名调用它的函数。 5)函数重载就是一名多用,可以使代码更容易被理解; 6)对于插入运算符与流提取运算符的重载格式: istream &operator >>(istream &, 自定义类 &); ostream &operator >>(ostream &,自定义类 &); 6)用一个指针调用派生类的函数时,将指针定义为指向基类的指针,基类的函数要定义为 虚函数,将各个派生类的地址赋值给指针,通过指针调用函数,实现多态性。
void Boss::print() { cout << id << '\t' << name << '\t' << age << '\t' << sex << '\t'<< "Boss" << "\t\t" << '$' << getPay() << " per " << salarySystem<< endl;
Boss(string name, int age, string id, string sex, string salarySystem = "year") : Person(name, age, id, sex, salarySystem) {}
C++程序设计实验 类的继承和派生
《C++程序设计》实验报告准考证号xxxxxx题目:类的继承和派生姓名xxx 日期xxx实验环境:Visual c++6.0实验内容与完成情况实验目的:1,理解继承派生的概念2,掌握派生类的定义,熟练定义派生类及其构造函数、析构函数3,理解继承派生中可能存在的问题实验内容:1,完成基类的定义定义person类,其属性有姓名name、年龄age、性别sex定义相关构造函数、析构函数,提供不同的构造函数以不同方式构造对象定义showperson函数显示相关信息定义setperson函数存入相关信息2,定义派生类student其属性增加:学号ID、年级grade、班级clas定义相关构造函数、析构函数,提供不同的构造函数以不同方式构造对象定义showstudent函数显示对象的所有信息定义setstudent函数存入相关信息3,定义派生类teacher其属性增加:工号ID、职务position、部门department定义相关构造函数、析构函数,提供不同的构造函数以不同方式构造对象定义showteacher函数显示对象的所有信息定义setteacher函数存入相关信息4,设计main函数创建对象,测试派生类对象产生时,构造函数调用过程派生类对象释放时,析构函数调用过程并输出结果源程序代码:#include<iostream>#include<string>using namespace std;class person{protected:string name,sex;int age;public:person(string a="未命名",int b=0,string c="未知"){name=a;age=b;sex=c;}void setperson(string a,int b,string c);void showperson();~person(){cout<<"析构"<<name<<endl;}};void person::setperson(string a,int b,string c){name=a;age=b;sex=c;}void person::showperson(){cout<<"姓名:"<<name<<"\t年龄:"<<age<<"\t性别:"<<sex<<endl;}class student:public person{string ID,grade,clas;public:student(string a="未命名",int b=0,string c="未知",string d="0000",string e="未知",string f="未知"):person(a,b,c){ID=d;grade=e;clas=f;}void showstudent();void setstudent(string a,int b,string c,string d,string e,string f);~student(){cout<<"析构"<<name<<endl;}};void student::showstudent(){person::showperson();cout<<"学号:"<<ID<<"\t年级:"<<grade<<"\t班级:"<<clas<<endl;}void student::setstudent(string a,int b,string c,string d,string e,string f){setperson(a,b,c);ID=d;grade=e;clas=f;}class teacher:public person{string ID,position,department;public:teacher(string a="未命名",int b=0,string c="未知",string d="无",string e="未知",string f="未知"):person(a,b,c){ID=d;position=e;department=f;}void showteacher();void setteacher(string a,int b,string c,string d,string e,string f);~teacher(){cout<<"析构"<<name<<endl;}};void teacher::showteacher(){person::showperson();cout<<"工号:"<<ID<<"\t职务:"<<position<<"\t部门:"<<department<<endl;}void teacher::setteacher(string a,int b,string c,string d,string e,string f){setperson(a,b,c);ID=d;position=e;department=f;}void main(){person a1("张三",15,"男");a1.showperson();person a2("小三");a2.showperson();person b;string h,j;int i;cout<<"请输入:"<<endl;cout<<"姓名:";cin>>h;cout<<"年龄:";cin>>i;cout<<"性别:";cin>>j;b.setperson(h,i,j);b.showperson();student c1("王五",16,"男","1001","10级","二班");c1.showstudent();student c2("小五",16,"男");c2.showstudent();student d;string k,l,m;cout<<"请输入:"<<endl;cout<<"姓名:";cin>>h;cout<<"年龄:";cin>>i;cout<<"性别:";cin>>j;cout<<"学号:";cin>>k;cout<<"年级:";cin>>l;cout<<"班级:";cin>>m;d.setstudent(h,i,j,k,l,m);d.showstudent();teacher e1("赵六",33,"男","2002","教授","计算机学院");e1.showteacher();teacher e2("小刘",33,"男");e2.showteacher();teacher f;string n,o,p;cout<<"请输入:"<<endl;cout<<"姓名:";cin>>h;cout<<"年龄:";cin>>i;cout<<"性别:";cin>>j;cout<<"工号:";cin>>n;cout<<"职务:";cin>>o;cout<<"部门:";cin>>p;f.setteacher(h,i,j,n,o,p);f.showteacher();}输出结果:出现的问题:解决方案(列出遇到的问题和解决办法,列出没有解决的问题)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
};
/*bicycle类与下面motorcar类虚拟继承vehicle类*/
class bicycle:virtual public vehicle
{
public:
void Run(){cout<<"A bicycle is running!"<<endl;}
3,主函数:申明基类指针,通过基类指针指向派生类指针来实现多态性和动态绑定。
实验内容
实验程序设计如下:
#include<iostream>
using namespace std;
/*定义vehicle类*/
class vehicle
{
public:
virtual void Run(){cout<<"A vehicle is running!"<<endl;}
void Stop(){cout<<"A bicycle is stopping!"<<endl;}
};
class motorcar:virtual public vehicle
{
public:
void Run(){cout<<"A motorcar is running!"<<endl;}
void Stop(){cout<<"A motorcar is stopping!"<<endl;}
ptr=&a3;
display(ptr);
ptr=&a4;
display(ptr);
a1.Run();
a2.Run();
a3.Run();
a4.Run();
return 0;
}
实验结果如图:
实验心得:通过这次实验,我掌握了类的继承与派生,学会类的虚拟继承避免多重派生的歧义性,还掌握乐通过虚函数实现多态性的方法。并且了解了动态绑定的技术。在实验过程中,开始出现了错误,后来把bicycle和motorcar类改为了虚拟继承,问题就解决了。
(1)建立如下几个类,关系满足如图
(2)具体要求
1,bicycle和motorcar虚拟继承于vehicle;
2,vehicle中申明数据成员表示:最高时速和重量;成员函数:Run和Stop用于实现车辆的启动和停止,这两个函数申明为虚拟函数;
3,bicycle、motorcar和motorcycle重载虚函数Run和Stop
这个实验让我对实现动态绑定的技术有了更多的了解。
教师签字
签字日期
2011年6月20
};
void display(vehicle *pp)
{
pp->Run();
pp->Stop();
}
int main(void)
{
vehicle a1,*ptr;
bicycle a2;
motorcar a3;
motorcycle a4;
ptr=&a1;
display(ptr);
ptr=&a2;
display(ptr);
};
/*motorcycle类的定义*/
class motorcycle: public bicycle,public motorcar
{
public:
void Run(){cout<<"A motorcycle is running!"<<endl;}
void Stop(){cout<<"A motorcycle is stopping!"<<endl;}
C++第五次实验
学生姓名
xxx
班级
雷电091
学号
xxxxxxxxxx
实验项目
实验五类继承、派生、多态性
指导的
(1)掌握类的继承与派生;
(2)学会类的虚拟继承避免多重派生的歧义性;
(3)掌握通过虚函数实现多态性的方法;
(4)掌握动态绑定的技术。
二、实验内容
编写如下要求的完整程序:动态绑定