c++派生类与继承实验报告材料

合集下载

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、运算符重载功能等。

实验五 继承与派生2(报告)

实验五  继承与派生2(报告)




创建一个表示雇员信息的employee类,其中包含数据成员name、empNo和salary,分别表示雇员的姓名、编号和月薪。再从employee类派生出3个类worker、technician和salesman,分别代表普通工人、科研人员、销售人员。三个类中分别包含数据成员productNum、workHours和monthlysales,分别代表工人每月生产产品的数量、科研人员每月工作的时数和销售人员每月的销售额。
2、派生类的定义(worker普通工人类、technician科研人员类和salesman销售人员类)
worker普通工人类的定义,公有继承employee,增加变量productNum(产品数量)与profit(每件产品的利润)及用来计算雇员月薪pay()函数(计算员工月工资并输出)。
technician科研人员类公有继承employee,增加变量workHours(工作时间)及hoursalary(每小时的工资)及pay()函数(功能同上)。
salesman销售人员类也是公有继承employee,增加monthlysales(月销售额)、ti_cheng(销售额提成)及pay()函数(功能同上)。
如上图主函数。定义三个不同工种的员工,并输出信息。




运行结果:










程序编译一次成功了,这次没有意外。
课程名称
C++程序设计A2
班级
1420561
实验日期
2015.01.01
姓名
刘翔翔
学号
21
实验成绩

c 继承与派生实验报告

c 继承与派生实验报告

c 继承与派生实验报告
C 继承与派生实验报告
实验目的:通过实验,掌握C语言中继承与派生的概念和使用方法,加深对面向对象编程的理解。

实验内容:在C语言中,继承与派生是面向对象编程中非常重要的概念。

在本次实验中,我们将通过一个简单的例子来演示C语言中的继承与派生的用法。

首先,我们定义一个基类(父类)Person,包括姓名和年龄两个成员变量,以及一个显示信息的成员函数。

然后,我们定义一个派生类(子类)Student,继承自Person类,新增一个成员变量学号,并重写显示信息的成员函数。

在实验中,我们首先创建一个Person对象,设置姓名和年龄,然后调用显示信息函数,观察结果。

接着,我们创建一个Student对象,设置姓名、年龄和学号,再次调用显示信息函数,观察结果。

实验结果:通过实验,我们成功实现了C语言中的继承与派生。

我们发现,通过继承,子类Student可以直接使用父类Person中的成员变量和成员函数,同时可以新增自己的成员变量和函数。

这样的设计使得代码更加简洁和灵活,提高了代码的复用性和可维护性。

结论:C语言中的继承与派生是面向对象编程中非常重要的概念,通过本次实验,我们深入理解了这一概念的用法和意义。

掌握了继承与派生的方法后,我们可以更加灵活地设计和编写程序,提高代码的质量和效率。

总结:通过本次实验,我们对C语言中的继承与派生有了更深入的理解,加深了对面向对象编程的认识。

在今后的学习和工作中,我们将更加灵活地运用继承与派生的方法,提高代码的质量和效率。

c++继承与派生实验报告

c++继承与派生实验报告

第四次试验报告班级:计算机1204姓名:杨天野学号:20123914 题目一(1)定义一个基类Animal,有私有整型成员变量age,构造其派生类dog,在其成员函数SetAge(int n)中直接给age赋值,看看会有什么问题,把age 改为公有成员变量,还回有问题吗?编程试之。

源程序:#include<iostream>using namespace std;class Animal{private:int age;};class dog:public Animal{public:SetAge(int n);};dog::SetAge (int n){age = n;}int main(){dog d1;d1.SetAge (90);return 0;}截屏:错误:‘age’ : cannot access private member declared in class ‘Animal’改为公有变量时:源程序:#include<iostream>using namespace std;class Animal{public:int age;};class dog:public Animal{public:SetAge(int n);};dog::SetAge (int n){age = n;}int main(){dog d1;d1.SetAge (90);return 0;}截图:题目二:(2)定义一个基类BaseClass,有整型变量Number,构造其派生类DerivedClass,观察构造函数和析构函数的执行情况。

源程序:#include<iostream>using namespace std;class baseclass{public:baseclass(){cout<<"构造了基类的一个构造函数"<<endl;}~baseclass(){cout<<"构造了基类的一个析构函数"<<endl;}private:int Number;};class DerivedClass:public baseclass{public:DerivedClass(){cout<<"构造了一个派生类的构造函数"<<endl;} ~DerivedClass(){ cout<<"构造了一个派生类的析构函数"<<endl; }};int main(){DerivedClass n;return 0;}截图:题目三:(3)定义一个车(vehicle)基类,具有Maxspeed、Weight等成员,Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类。

c派生类与继承实验报告

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类的成员函数完成三条边是否能构成三角形的检验和三角形面积计算,面积显示。

C++面向对象程序设计实验五:派生类与继承

C++面向对象程序设计实验五:派生类与继承

C++面向对象程序设计实验五:派生类与继承C++面向对象程序设计实验五:派生类与继承实验目的:(1) 学习类的继承,能够定义和使用类的继承关系。

(2) 学习单继承派生类的声明与定义方法。

(3) 熟悉派生类在私有继承、公有继承、保护继承这三种方式下对基类成员的访问规则。

(4) 知道单继承派生类构造函数和析构函数的执行次序,熟悉单继承派生类构造函数和析构函数的构造方法。

(5) 学习多重继承派生类的定义方法。

(6) 知道多重继承派生类构造函数和析构函数的执行次序,熟悉多重继承派生类构造函数和析构函数的定义方法,理解虚基类和非虚基类的差别。

实验内容:1、定义一个Rectangle类,它包含两个数据成员length和width;以及包含用于求长方形面积的area成员函数。

再定义Rectangle的派生类Cuboid,它包含一个新的数据成员height和用于求长方体体积的成员函数Vol。

在main函数中,使用这两个类,求某个长方形的面积和某个长方体的体积。

2、程序填空:定义一个Person类,它包含三个数据成员name、age、sex;以及用于显示数据成员值的show成员函数。

再定义Person的派生类Teacher,它包含两个新的数据成员department(部门)、salary(月薪),和用于显示数据成员值的show成员函数。

再定义Person的派生类Student,它包含两个新的数据成员code(学号)、score(分数),和用于显示数据成员值的show成员函数。

再定义Teacher类和Student类的多重继承派生类TStudent(例如:由正在攻读博士学位的在职教师构成的类)。

在main函数中,使用这四个类,分别输出此四个类的某个对象的全部数据成员的值。

给出部分实现代码如下:#include <iostream>#include <string>using namespace std;class Person{protected: //若将数据成员设为私有的,在本题中可能比较麻烦string name; //姓名int age; //年龄char sex; //性别public:Person(string name1,int age1,charsex1):name(name1),age(age1),sex(sex1)//构造函数定义{cout <<"Person constructing..."<<endl;}~Person() {cout <<"Person destructing..."<<endl;} //析构函数定义void show(){cout <<"name:"<<name<<endl;cout <<"age:"<<age<<endl;cout <<"sex:"<<sex<<endl;}};/*(1)此处要定义Teacher类的代码,在此省略了*//*(2)此处要定义Student类的代码,在此省略了*//*(3)此处要定义TStudent类的代码,在此省略了*/main() int{Person p1("刘德华",40,'M'); //Person类对象p1.show();cout <<endl;Teacher t1("赵薇",28,'F',"导演系",10000); //Teacher类对象t1.show();cout <<endl;Student s1("宁静",35,'F',"200803040520",95); //Student类对象s1.show();cout <<endl;TStudent ts1("黎明",30,'M',"通信工程系",2600,"200803040518",90);//TStudent对象ts1.show();cout <<endl;system("pause");return 0;}。

实验五 继承与派生实验报告

实验五 继承与派生实验报告

实验五继承与派生一、实验目的( 1 )熟练掌握类的继承,能够定义和使用类的继承关系。

( 2 )掌握派生类的声明与实现方法。

( 3 )掌握类构造函数的初始化列表与作用域分辨符的使用方法。

二、实验工具与准备工作在开始实验前,应回顾或复习相关内容。

需要一台主算机,其中安装有VisualC + + 6 .0 、VisualC + + 2005 、VisualC + + 2005 ExpreSS 、Dev 一C + +或MinGW Developer Studio 等集成开发环境软件。

三、实验内容完成设计性实验项目8.7 创建一个表示雇员信息的employee类,其中包含数据成员name、empNo和salary,分别表示雇员的姓名、编号和月薪。

再从employee类派生出3个类worker、technician和salesman,分别代表普通工人、科研人员、销售人员。

三个类中分别包含数据成员productNum、workHours和monthlysales,分别代表工人每月生产产品的数量、科研人员每月工作的时数和销售人员每月的销售额。

要求各类中都包含成员函数pay,用来计算雇员的月薪,并假定:普通工人的月薪=每月生产的产品数×每件产品的赢利×20%科研人员的月薪=每月的工作时数×每小时工作的酬金销售人员的月薪=月销售额×销售额提成。

#include<iostream>using namespace std;class employee{protected:char name[20];int empNo;float salary;public:employee(char *cp="李强",int no=1001);employee(employee&);void setname(char *cp);void setempNo(int no);void setsalary(float sa);char*getname();int getempNo();float getsalary();void display();employee compsalary(employee *emp);};employee::employee(char *cp,int no){int i=0;while(*cp){name[i]=*cp;i++;cp++;}name[i]='\0';empNo=no;}employee::employee(employee &em) {int i=0;while([i]){name[i]=[i];i++;}name[i]='\0';empNo=em.empNo;salary=em.salary;}void employee::setname(char *cp) {int i=0;while(*cp){name[i]=*cp;i++;cp++;}name[i]='\0';}void employee::setempNo(int no) {empNo=no;}void employee::setsalary(float sa) {salary=sa;}char*employee::getname(){return name;}int employee::getempNo(){return empNo;}float employee::getsalary(){return salary;}void employee::display(){cout<<"工号为"<<empNo<<"的雇员"<<name<<"的月薪为"<<salary<<endl; }employee employee::compsalary(employee *emp){if(this->salary>=emp->salary)return *this;elsereturn *emp;}class worker : public employee{public:worker(char*,int,int);void setproductNum(int n){ productNum=n;}int getproductNum(){ return productNum;}void pay();private:int productNum;static float proper; //每件产品的利润};float worker::proper=30; //假设每件产品的利润为30元worker::worker(char *name,int no,int pronum):employee(name,no){productNum=pronum;}void worker::pay(){salary=productNum*proper*0.2;}class technician : public employee{public:technician(char*,int,float);void sethours(float h){ workHours=h;}float gethours(){ return workHours;}void pay();private:float workHours;static float payperhour; //科研人员每小时工作的酬金};float technician::payperhour=50; //假设科研人员每小时工作的酬金为50元technician::technician(char *name,int no,float hours):employee(name,no){workHours=hours;}void technician::pay(){salary=workHours*payperhour;}class salesman : public employee{public:salesman(char*,int,float);void setmonthlysales(int num){ monthlysales=num;}int getmonthlysales(){ return monthlysales;}void pay();private:float monthlysales;static float percent; //销售人员的销售提成};float salesman::percent=0.6; //假设销售人员的销售提成为60% salesman::salesman(char *name,int n,float sn):employee(name,n){monthlysales=sn;}void salesman::pay(){salary=monthlysales*percent;}void main(){worker w1("王某",1001,1000);technician t1("李某",1002,200);salesman s1("许某",1003,10000);w1.pay();t1.pay();s1.pay();cout<<"工人"<<w1.getname()<<"的月薪为"<<w1.getsalary()<<"元\n";cout<<"科研人员"<<t1.getname()<<"的月薪为"<<t1.getsalary()<<"元\n";cout<<"销售人员"<<s1.getname()<<"的月薪为"<<s1.getsalary()<<"元\n";}8.8 创建一个automobile类表示汽车,其中包含数据成员brand和speed,分别表示汽车的品拍和行驶速度;成员函数run和stop表示行驶和停止。

c++实验报告 继承与派生

c++实验报告 继承与派生

昆明理工大学信息工程与自动化学院学生实验报告(201 —201 学年第二学期)课程名称:C++程序设计开课实验室:年月日实验目的1.学习定义和使用类的继承关系,定义派生类。

2.熟悉不同继承方式下对基类成员的访问控制。

3.学习利用虚基类解决二义性问题。

题目1:定义一个基类Animal,有私有整型成员变量age,构造其派生类dog,在其成员函数SetAge(int n)中直接给age赋值,看看会有什么问题,把age改为公有成员变量,还会有问题吗?编程试试看。

实验步骤:编写程序定义基类Animal,成员变量age定义为私有的。

构造派生类dog,在其成员函数SetAge(int n)中直接对age赋值时,会出现类似以下的错误提示:error C2248:’age’:cannot access private member declared in class’Animal’error C2248:’age’:cannot access private member declared in class’Animal’把age改为公有成员变量后重新编译就可以了。

程序名:lab7—1.cpp。

源程序1/****** lab7-1.cpp ******/#include <iostream.h>class Animal{//protected:int age;public:Animal(int a){ age=a;cout<<"我是基类构造函数,我创建基类对象age="<<age<<endl;}~Animal(){cout<<"我是基类析构函数,我释放基类对象age="<<age<<endl;}int getage() const{return age;}void setage(int a){age=a;}};class Dog:public Animal{int color;public:Dog(int a=10,int c=3):Animal(a),color(c){ //setage(a);cout<<"我是子类构造函数,我创建子类对象color="<<color<<" age="<<getage()<<endl;}~Dog(){cout<<"我是子类析构函数,我释放子类对象color="<<color<<endl;}};void main(){Dog a;}运行结果截图题目2:定义一个基类BaseClass,有整型成员变量Number,构造其派生类DerivedClass,观察构造函数和析构函数的执行情况。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验2 派生类与继承
实验课程名:面向对象程序设计(C++)
专业班级:学号:姓名:
实验时间:实验地点:指导教师:
二、实验内容
一、构造一个类Geometry 及其派生类,该类主要实现关于几何图形的基本操作。

对于基类“几何图形”,有求面积、求体积的函数(纯虚函数),其派生类圆和矩形主要有初始化(构造函数),求面积,求周长操作,类圆的派生类圆球和圆柱有求表面积、体积操作。

试在主函数中分别定义圆、圆球、圆柱以及矩形的对象,并调用其成员函数实现其相应操作。

实验代码如下:
#include<iostream>
using namespace std;
class Geometry
{
public:
Geometry(){}
Circle
radiums
Circle()
~Circle() Ball
Ball()
~Ball() Geometry
Geometry()
~Geometry()
GetArea()
GetPerimeter()
Getcolume()
show()
Column Column()
~Column()
Rectangle Rectangle() ~Rectangle()
column.show();
return 0;
}
运行结果:
代码分析:
1)首先定义基类Geometry,在定义基类的派生类Circle,Rectangle
再定义以Circle,Rectangle为基类的派生类Column,以及以Circle为基类的派生类Ball;
2)在定义派生类时用构造函数初始化私有成员;
3)最后用类的对象来调用类函数;
二、设计如下类:
(1)建立一个Point类,表示平面中的一个点;建立一个Line类,表示平面中的一条线端,内含两个Point类的对象;建立Triangle类,表示一个三角形,内含三个Line类的对象构成一个三角形。

(2)设计三个类的相应的构造函数、复制构造函数,完成初始化和对象复制
(3)设计Triangle类的成员函数完成三条边是否能构成三角形的检验和三角形面积计算,面积显示。

实验代码:#include<iostream>
#include<math.h>
using namespace std;
class Point //定义一个点的类,坐标为(x,y)
{
public:
Point(double i,double j){x=i;y=j;}
double x,y;
};
class Line
cout<<"三角形的面积为:"<<Area()<<endl;
else
cout<<"不能构成三角形"<<endl;
}
int main()
{
Triangle T1(0,0,0,1,0,0,1,0,0,1,1,0);
Triangle T2(1,0,0,0,0,0,0,2,0,0,0,1);
T1.show();
T2.show();
return 0;
}
实验结果:
实验分析:
1)在主函数中定义两个三角形的类,分别由三条边六个点组成,其中第一组能组成三角形,输出面积,第二组边不能组成三角形输出不能构成
三角形;
2)定义点类时,定义两个浮点型数据,用来表示点的坐标,定义边类时定义两个顶点,表示两个端点组成线段,定义三角形类时,用三边表示
三角形;
3)三角形的面积用海伦公式求得,在三角形中定义一个判断函数,判断三边能否组成三角形,当能组成三角形时则求面积并输出,当不能组成
三角形时,输出不能构成三角形;
三、定义一个基类MyArray,基类中可以存放一组整数,基类中有构造函数、析构函数、输入数据和输出数据的函数。

class MyArray{
public:
MyArray(int leng);
~MyArray{};
void Input();
A.turn();
A.display();
return 0;
}
实验结果:
结果分析:
定义一个基类,用指针作为数组名,定义一个数组,在定义各个基类,分别实现求平均值,排序,倒置的功能。

在调用成员时由于各个派生类都有基类的成员input,output,故用虚基类,避免出现二异性。

四、队列具有先进先出的特点,所有新来的元素都放在队列尾部,出队列的元素从队列
程序分析:
定义基类链表其中包含功能
能够在链表的头尾增加节点以及在链表尾增加节点
能够记录链表的个数(用静态成员)
能返回链表中的节点个数
能查看链表头节点的元素值
能告知链表是否为空
在链表类的构造函数中初始化链表
在链表类的析构函数中释放链表所有元素的空间
定义派生类队与栈,队列初始化用链表的初始化函数,用gettail实现入队操作用gethead 实现从队列的头部出对。

栈中初始化用函数puthead实现从栈顶入栈,用函数gethead()实现从栈顶出栈。

三、结论
1)继承可以从基类中获得派生类中不曾定义过的成员,提高了编程效率;2)继承与派生分为共有、私有、保护三种继承方式,其中共有使用最广泛,。

相关文档
最新文档