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,观察构造函数和析构函数的执行情况。

实验四 C++中的继承与派生

实验四  C++中的继承与派生

实验四C++中的继承与派生一、实验目的:1.理解C++中继承与派生的概念;2.掌握C++中各种不同继承方式的访问属性差别;3.掌握单继承与多继承的实现方法;4.掌握派生类构造函数与析构函数的实现及调用顺序;5.掌握虚基类的使用方法。

二、实验任务【题目】小型公司人员管理某小型公司有四类人员:经理、技术人员、销售经理、销售员。

设计一个基类employee,派生出manager(经理)、technician(技术人员)、salesmanager(销售经理)、saleman(销售员)。

销售经理既是经理又是销售员,兼具两类人员的特点,因此同时继承manager 和salesman 两个类。

1、类定义1)employee 类:基本信息:编号、姓名、性别、出生日期、职位、薪水等;出生日期使用自定义的Date (日期)类;2)Date 类:成员变量:年、月、日3)派生类technician:新增属性:工作时间派生类saleman:新增属性:销售额、所属部门2、实现人员信息的录入与显示;3、计算并显示个人月薪:月薪计算办法:总经理拿固定月薪8000 元,技术人员按每小时25 元领取月薪;推销员的月薪按当月销售额的4%提成;销售经理固定月薪5000 元加所管辖部门当月销售总额的5‰。

【提示】1、在基类中,除了定义构造函数和析构函数,还应统一定义对各类人员信息应有的操作,规范类族中各派生类的基本行为,但是各类人员的月薪计算方法不同,不能在基类employee 中统一确定计算方法。

各类人员信息的显示内容不同,同样不能在基类employee中统一确定显示方法。

在基类中实现上述功能的函数体应为空,在派生类中根据同名覆盖原则定义各自的同名函数实现具体功能。

代码:#include<iostream>#include<string>using namespace std;class Date{private:int year;int month;int day;public:void SetYear(int x) {year=x;}void SetMonth(int x) {month=x;}void SetDay(int x) {day=x;}int GetYear() {return year;}int GetMonth() {return month;}int GetDay() {return day;}};class employee{protected:int num;string nam;string sex;Date birth;string position ;float salary;public:void display(){cout<<"编号:"<<num<<"姓名:"<<nam<<"性别:"<<sex<<"出生日期:"<<birth. GetYear()<<"-"<<birth.GetMonth()<<"-"<<birth.GetDay()<<"职位:"<<position;}};class manager:virtual public employee{public:void set_manager(int n,string na,string se,int y,int m,int d,string pos){num=n;nam=na;sex=se;birth.SetYear(y);birth.SetMonth(m);birth.SetDay(d);position=pos;}void display(){employee::display();}void total_salary(){ salary=8000;cout<<"经理月薪:";cout<< salary<<"元";}};class technician:virtual public employee{protected:float Time;public:float t;void set_technician(int n,string na,string se,int y,int m,int d,string pos,float t) { num=n;nam=na;sex=se;birth.SetYear(y);birth.SetMonth(m);birth.SetDay(d);position=pos;Time=t;}void display(){ employee::display();cout<<"工作时间:"<<Time<<endl;}void total_salary(){salary= 25*Time;cout<<"技术人员月薪:" ;cout<< salary<<"元";}};class saleman :virtual public employee{protected:float sale;string dep;public:void set_saleman(int n,string na,string se,int y,int m,int d,string pos,float sale1,string de) {num=n;nam=na;sex=se;birth.SetYear(y);birth.SetMonth(m);birth.SetDay(d);position=pos;sale=sale1;dep=de;}void display(){employee::display();cout<<position<<"销售额:"<<sale<<"所属部门:"<<dep<<endl;}void total_salary (){salary=sale*0.04;cout<<"销售员月薪:"<<salary<<"元";}};class salesmanager:public manager,public saleman{public:void total_salary (){salary=sale*0.05+5000;cout<<"销售经理月薪:" << salary<<"元";}};int main (){manager m1;technician tec;saleman s;salesmanager sg;int n,y,m,d,choose,choose1;string str,se, p;cout<<"\n\t\t================================================="<<endl;cout<<"\t\t1:输入信息与显示2:个人月薪0:退出"<<endl;cout<<"\t\t=================================================="<<endl;cout<<"\n输入您要进行的操作:";cin>>choose;while(choose!=0){switch(choose){case 1:cout<<"输入员工编号:";cin>>n;cout<<"输入员工出生日期:";cin>>y>>m>>d;cout<<"输入员工姓名:";cin>>str;cout<<"输入员工性别:";cin>>se;cout<<"输入员工职位:";cin>>p;if (p=="manager"){m1.set_manager( n, str, se,y,m,d,p);m1.display();}else if(p=="technician"){float t;cout<<"输入时间:";cin>>t;tec.set_technician( n,str, se,y,m,d, p, t) ;tec.display();}else if(p=="saleman"){float sale2;string de;cout<<"销售额:" ;cin >> sale2;cout<<"所属部门:";cin>>de ;s.set_saleman( n, str, se,y,m,d, p, sale2, de);s.display();}else{float sale1;string de;cout<<"销售额:" ;cin>>sale1;cout<<"所属部门:";cin>>de ;sg.set_saleman( n,str, se,y,m,d, p, sale1, de) ;s.display();}break;case 2:cout<<"\n\t\t===================================================="<<endl;cout<<"\t\t11: 经理12: 技术人员13:销售员14:销售经理"<<endl;cout<<"\t\t============================================================"< <endl;cout<<"\n输入您要进行的操作:";cin>>choose1;while(choose1!=0){ switch(choose1){case 11:m1.total_salary();break;case 12:tec.total_salary();break;case 13:s.total_salary();break;case 14:sg.total_salary();break;}choose1=0;}break;}cout<<"\n\t\t=================================================="<<endl;cout<<"\t\t1:输入信息与显示2:个人月薪0:退出"<<endl;cout<<"\t\t=================================================="<<endl;cout<<"\n输入您要进行的操作:";cin>>choose;}return 0;}。

C++实验三 派生类与继承

C++实验三 派生类与继承

实验三派生类与继承班级:123班姓名:朱广金学号:122536一、实验目的1、学习类的继承,能够定义和使用类的继承关系。

2、学习派生类的声明与定义方法。

3、掌握类的定义和对象的声明。

4、熟悉公有派生和私有派生的访问特性。

5、掌握派生类构造函数和析构函数的执行顺序。

6、掌握利用访问声明调整基类成员在派生类中的访问属性。

*****************************************************//**************************************************************************二、试验内容1、下面的程序可以输出ASCII字符与所对应的数字的对照表。

修改下列程序,使其可以输出字母a到z(或任意两个字符间)与所对应的数字的对照表。

***************************************************************************#include<iostream>/****************iomanip的作用:*主要是对cin,cout之类的一些操纵运算子,比如setfill,setw,setbase,setprecision等等。

它是I/O流控制头文件,就像C里面的格式化输出一样.以下是一些常见的控制函数的:*dec 置基数为10 相当于"%d"*hex 置基数为16 相当于"%X"*oct 置基数为8 相当于"%o"*setfill( 'c' ) 设填充字符为c*setprecision( n ) 设显示有效数字为n位*setw( n ) 设域宽为n个字符*这个控制符的意思是保证输出宽度为n。

************************************#include <iomanip>using namespace std;//基类class table{public://构造函数table(char p,char q){i=p;j=q;}void ascii(void);protected:char i;char j;};///////////////////////////////////////////////////////void table::ascii(void){int k=1;for (;i<=j;i++){cout<<setw(4)<<i<<(int)i;if((k)%12==0) //每12个换行cout<<"\n";k++;}cout<<"\n";}//派生类class der_table:public table{public:der_table(char p,char q,char *m):table(p,q)//派生类的构造函数{c=m;}void print(void);protected:char *c;};//////////////////////////////////////////////////////////void der_table::print(void){cout<<c<<"\n";table::ascii();}//主函数int main(){der_table obl('a','z',"ASCII value---char");obl.print();return 0;/*****************************************提示:修改后的主程序为:int main(){der_table ob('a','z',"ASCII value---char");ob.print();return 0;}*******************************************//*********************************************************************2、已有类Time和Date,要求设计一个派生类Birthtime,*它继承类Time和Date,并且增加一个数据成员Childname用于表示小孩的名字,*同事设计主程序显示一个小孩的出生时间和名字。

厦理实验四派生类和继承

厦理实验四派生类和继承

《C++面向对象程序设计》实验报告实验序号:03 实验项目名称:派生类与继承{Derived bb; //语句2bb.setx(16); //语句3bb.sety(25); //语句4bb.show(); //语句5cout<<"Base::x="<<bb.x<<endl; //语句6cout<<"Derived::y="<<bb.y<<endl; //语句7cout<<"Base::x="<<bb.getx()<<endl; //语句8cout<<"Derived::y="<<bb.gety()<<endl; //语句9return 0;}(1)写出程序的运行结果。

【运行结果截图】:(2)按以下要求,对程序进行修改后再调试,指出调试中出错的原因。

1)将基类Base中的数据成员x的访问权限改为private时,会出现哪些错误,为什么?【运行结果分析】:私有继承不能访问基类公有成员的对象。

2)将基类Base中的数据成员x的访问权限改为protected时,会出现哪些错误,为什么?【运行结果分析】:私有继承不能访问基类保护成员的对象。

3)在原程序的基础上,将派生类Derived的继承方式改为private时,会出现哪些错误?为什么?【运行结果分析】:公有继承时不能访问基类的私有成员的内部和对象,不能访问基类的保护成员的对象。

4)在原程序的基础上,将派生类Derived的继承方式改为protected时,会出现哪些错误?为什么?【运行结果分析】:保护继承时不能访问基类的私有成员的内部和对象,不能访问基类公有成员和保护成员的对象。

2、编写一个学生和教师的数据输入和显示程序。

学生数据有编号、姓名、性别、年龄、系别和成绩,教师数据有编号、姓名、性别、年龄、职称和部门。

C 继承与派生实验报告

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++]继承和派生实验报告

[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++实验报告--继承和派生

C++实验报告--继承和派生
cout<<"Teacher constructing...."<<endl;
}
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上机实验报告实验五 This manuscript was revised by the office on December 22, 2012实验五继承与派生1.实验目的1.学习定义和使用类的继承关系,定义派生类2.熟悉不同继承方式下对基类成员的访问控制3.学习利用虚基类解决二义性问题2.实验要求1.定义一个基类Animal,有私有整型成员变量age,构造其派生类dog,在其成员函数SetAge(intn)中直接给age赋值,看看会有什么问题,把age改为公有成员变量,还会有问题吗?编程尝试。

2.定义一个基类BaseClass,有整型变量Number,构造其派生类DerivedClass,观察构造函数和析构函数的执行情况。

3.定义一个车(vehicle)基类,具有Maxspeed、Weight等成员,Run、Stop 等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类。

自行车(bicycle)类有高度(Height)等属性,汽车(motorcar)类有座位数(SeatNun)等属性。

从bicycle和motorcar派生出摩托车(motorbicycle)类,在继承过程中,注意把vehicle设置为虚基类。

如果不把vehicle设置为虚基类,会有什么问题?编程尝试。

3.实验内容及实验步骤1.编写程序定义基类Animal,成员变量age定义为私有的。

构造派生类dog,在其成员函数SetAge(intn)中直接对age赋值时,会出现类似以下的错误提示:errorC2248:‘age’:cannotaccessprivatememberdeclaredinclass‘Animal’errorC2248:‘age’:cannotaccessprivatememberdeclaredinclass‘Animal’把age改为公有成员变量后重新编译就可以了。

程序名:lab7_1.cpp。

C 继承与派生实验报告

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,我们可以看到其对程序运行结果的影响。

这种灵活性,使得我们可以根据具体需求,定制不同的派生类,实现更加个性化的功能。

派生类与继承实验报告

派生类与继承实验报告
}
void show1()
{coutvv" nu m:"v vnum vve ndl;
coutv v"n ame:"v vn amevve ndl; coutvv"sex:"vvsexvve ndl;
coutvv"age:"vvagevve ndl;
coutvv"a part:"vva partvve ndl;
2将基类Base中数据成员x的访问权限改为protected什么?
3在源程序的基础上,将派生类Derived的继承方式改为 错误?为什么?
4在源程序的基础上,将派生类Derived的继承方式改为 些错误?为什么?
时,会出现哪些错误?为
private时,会出现哪些
P rotected时,会出现哪
解答如下;
}
~Teacher()tri ng title;
};
int main()
{Stude nt S(1001,"ya ng-he ng",f,21,"com pu ter",98);
Teacher T(2009,"li-she ng",f,35,"ma nager","educatio n");
c:\docuiipiits and settings\adninistrator\Lcpp[29):error促测:* :cdirnot access public nember declaredinclass ' Base*c:ld(Miwnts andsettings\ jdninisttQr\t.cpp(1fl):5ee tiHlmration肝霍‘

C++程序设计实验四-类的继承与派生

C++程序设计实验四-类的继承与派生

电子与信息工程学院实验报告班级学号姓名吴前斌同组实验课程:C++程序设计实验项目:类的继承与派生实验日期:2019 年 5 月 5 日运行的效果如下:9、#include<iostream>#include<string>using namespace std;class building{protected:string name;int floors;float areas;public:building(string,int,float);void print();};building::building(string q,int m,float s){name=q;floors=m;areas=s;}void building::print(){cout<<"name:"<<name<<"floors:"<<floors<<"area:"<<areas<<endl; }class house:public building{public:house(string q,int m,float s,int i,int j):building(q,m,s){rooms=i;balcony=j;}void print();private:int rooms;int balcony;void house::print(){cout<<"name:"<<name<<"floors:"<<floors<<"areas:"<<areas<<"rooms:"<<roo ms<<"balcony:"<<balcony<<endl;}class office:public building{public:office(string q,int m,float s,int a,int b):building(q,m,s){offices=a;meetingrooms=b;}void print();private:int offices;int meetingrooms;};void office::print(){cout<<"name:"<<name<<"floors:"<<floors<<"areas:"<<areas<<"offices:"<<offic es<<"meetingrooms:"<<meetingrooms<<endl;}int main(){house q1("住宅",8,520,20,17);office q2("办公室",26,530,5,6);q1.print();q2.print();return 0;}运行的效果如下:int main(){account a1("cz",90,80,90,80,90);chemistry c1("zc",80,90,80,90,80);a1.show();cout<<"---------------------------"<<endl;c1.setanl(100);c1.show();}运行的效果如下图所示:实验心得:本次实验用了C++函数定义函数和函数重载,以及相关类的知识点,同时得掌握使用debug进行对函数的调试。

C++程序设计实验 类的继承和派生

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. 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)继承与派生分为共有、私有、保护三种继承方式,其中共有使用最广泛,。

相关文档
最新文档