实验三 报告 继承和派生类
c 继承与派生实验报告

c 继承与派生实验报告
C 继承与派生实验报告
实验目的:通过实验,掌握C语言中继承与派生的概念和使用方法,加深对面向对象编程的理解。
实验内容:在C语言中,继承与派生是面向对象编程中非常重要的概念。
在本次实验中,我们将通过一个简单的例子来演示C语言中的继承与派生的用法。
首先,我们定义一个基类(父类)Person,包括姓名和年龄两个成员变量,以及一个显示信息的成员函数。
然后,我们定义一个派生类(子类)Student,继承自Person类,新增一个成员变量学号,并重写显示信息的成员函数。
在实验中,我们首先创建一个Person对象,设置姓名和年龄,然后调用显示信息函数,观察结果。
接着,我们创建一个Student对象,设置姓名、年龄和学号,再次调用显示信息函数,观察结果。
实验结果:通过实验,我们成功实现了C语言中的继承与派生。
我们发现,通过继承,子类Student可以直接使用父类Person中的成员变量和成员函数,同时可以新增自己的成员变量和函数。
这样的设计使得代码更加简洁和灵活,提高了代码的复用性和可维护性。
结论:C语言中的继承与派生是面向对象编程中非常重要的概念,通过本次实验,我们深入理解了这一概念的用法和意义。
掌握了继承与派生的方法后,我们可以更加灵活地设计和编写程序,提高代码的质量和效率。
总结:通过本次实验,我们对C语言中的继承与派生有了更深入的理解,加深了对面向对象编程的认识。
在今后的学习和工作中,我们将更加灵活地运用继承与派生的方法,提高代码的质量和效率。
继承与派生实验报告

西安财经学院信息学院《面向对象方法及程序设计》 实验报告实验名称 继承与派生 实验室 519 实验日期 12.23继承与派生一、实验目的与要求1. 进一步巩固C++语言中类和对象的概念和应用。
2. 掌握继承和派生的概念和实现。
3. 进一步熟练掌握类和对象的概念,使用的方法,访问的规则。
4. 掌握单继承的概念和应用。
5. 掌握多继承和虚基类的概念,并熟练应用。
二、实验内容1.根据如图所示编辑程序,计算教师的课时,计算学生的平均成绩,假定每个学生3门课程,并输出每个类的信息(例如教师的职称,学生的专业等,程序实现要求使用到虚基类的知识)。
2. 编写一个程序实现员工的工资管理。
该公司主要有4类人员,经理(manager ),销售经理(salesmanager),技术人员(technician),销售员(salesman)。
这些人员都是职员(employee ),有编号,姓名,月工资,工龄等信息。
月工资的计算方法为:经理固定月薪8000元,技术人员每小时工资100元,销售人员底薪为1000,然后加上每月的销售额的4%,销售经理底薪5000,然后加上本部门当月销售总额的千分之五。
要求编写程序计算该公司职员的月工资并输出到屏幕上。
(假定该公司1个经理,1个销售经理,3个技术人员,3个销售人员)三、实验环境 硬件环境:PC 一台姓名 学号 班级 年级 指导教师 李翠软件环境:WIN7操作系统、Microsoft visual c++ 2010 四、实验步骤五、实验结果六、小结通过本次实验,使我对继承与派生有了更深入的了解。
包括,虚基类以及虚基类与派生类的构造函数与析构函数的调用等等。
七、源程序清单内容1:#include"iostream"using namespace std;class person{};class teacher:virtual public person{public:int b;};class teacher1:virtual public teacher{public:teacher1(int B){b=B;cout<<"教授"<<endl;cout<<"课时:"<<b<<endl;}};class teacher2:virtual public teacher{public:teacher2(int D){b=D;cout<<"讲师"<<endl;cout<<"课时:"<<b<<endl;}};class teacher3:virtual public teacher{public:teacher3(int F){b=F;cout<<"研究生助教"<<endl;cout<<"课时:"<<b<<endl;}};class student:public person{public:float a1,a2,a3;};class student1:public student{public:student1(float b1,float b2,float b3){a1=b1;a2=b2;a3=b3;cout<<"英语:"<<a1<<endl;cout<<"数据库:"<<a2<<endl;cout<<"java:"<<a3<<endl;}};class student2:public student{public:student2(float b1,float b2,float b3){a1=b1;a2=b2;a3=b3;cout<<"本科生:"<<endl;cout<<"英语:"<<a1<<endl;cout<<"组成原理:"<<a2<<endl;cout<<"c++:"<<a3<<endl;}};class student3:public student{public:student3(float b1,float b2,float b3){a1=b1;a2=b2;a3=b3;cout<<"专科生:"<<endl;cout<<"英语:"<<a1<<endl;cout<<"c语言:"<<a2<<endl;cout<<"数字电路:"<<a3<<endl;}};class zhuyan:public teacher3,public student1{public:zhuyan(int x,float a,float b,float c):teacher3(x),student1(a,b,c) {}};int main(){teacher1 q(50);teacher2 w(70);student2 e(75,82,100);student3 r(78,79,87);zhuyan t(80,70,78,81);system("pause");return 0;}内容2:#include <iostream>using namespace std;class employee{public:employee(){cout<<"编号:";cin>>number;cout<<"姓名:";cin>>name;salary=0;}protected:char number[5];char name[10];double salary;};class manager:public employee{public:manager(){monthlypay=8000;salary=monthlypay;}void print(){cout<<"经理:"<<name<<"编号:"<<number<<"本月工资:"<<salary<<endl;} protected:int monthlypay;};class technician:public employee{public:technician(){weekpay=100;}void pay(){cout<<name<<"工作时间:";cin>>workhour;salary=workhour*100;}void print(){cout<<"技术人员:"<<name<<"编号:"<<number<<"本月工资:"<<salary<<endl;} protected:int weekpay;int workhour;};class salesman:public employee{public:salesman(){basicsalary=1000;commrate=0.04;}void pay(){cout<<name<<"本月销售额:";cin>>sales;salary=basicsalary+sales* commrate;}void print(){cout<<"销售员:"<<name<<"编号:"<<number<<"本月工资:"<<salary<<endl;} protected:int basicsalary;double commrate;double sales;};class salesmanager:public salesman{public:salesmanager(){monthlypay=5000;commrate=0.005;}void pay(){cout<<name<<"本月部门销售额:";cin>>sales;salary=monthlypay+sales* commrate;}void print(){cout<<"销售经理:"<<name<<"编号:"<<number<<"本月工资:"<<salary<<endl;} private:double monthlypay;};int main(){manager obj1;obj1.print();technician obj2,obj3,obj4;obj2.pay(); obj2.print();obj3.pay(); obj3.print();obj4.pay(); obj4.print();salesman obj5,obj6,obj7;obj5.pay(); obj5.print();obj6.pay(); obj6.print();obj7.pay(); obj7.print();salesmanager obj8;obj8.pay(); obj8.print();system("pause"); }。
实验3继承和派生类的应用

实验3继承和派生类的应用C++面向对象程序设计实验指导实验3继承和派生类的应用3.1实验目的1.掌握多重继承和派生类的方法2.掌握初始化基类成员的方法3.掌握定义虚基类的方法3.2实验内容与步骤1.上机实验题一定义一个日期(年、月、日)的类和一个时间(时、分、秒)的类,并由这两个类派生出日期和时间类。
主函数完成基类和派生类的测试工作。
⑴分析定义一个描述日期的类,构造函数完成年、月、日的初始化,包含一个重新设置日期的成员函数,一个获取日期的成员函数。
该类可定义为:claDate{intYear,Month,Day;//分别存放年、月、日public:Date(inty=0,intm=0,intd=0){Year=y;Month=m;Day=d;}voidSetDate(int,int,int);voidGetDate(char某);};函数SetDate完成数据成员的赋初值。
函数GetDate要将整数年、月、日变换成字符串后,存放到参数所指向的字符串中。
把一个整数变换成字符串可通过库函数:char某_itoa(inta,char某,intb);来实现,参数a为要变换的整数,b为数制的基数(如10,表示将a转换为对应的十进制的字符串),转换的结果存放到所指向的字符串中。
函数返回变换后字符串的首指针。
该成员函数可以是:voidDate::GetDate(char某){chart[20];_itoa(Year,,10);trcat(,\_itoa(Month,t,10);trcat(,t);trcat(,\ _itoa(Day,t,10);trcat(,t);//将年变换为字符串表示//年、月、日之间用“/”隔开//将月变换为字符串表示//将年、月字符串拼接//将年、月、日拼接成一个字符串}定义描述时间的类与描述日期的类类同,然后用这二个类作为基类,公有派生出描述日期和时间的类。
简化的参考程序如下:#include#include#includeclaDate{intYear,Month,Day;//分别存放年、月、日public:Date(inty=0,intm=0,intd=0){Year=y;Month=m;Day=d;}void SetDate(int,int,int);voidGetDate(char某);};voidDate::SetDate(inty,intm,intd){Year=y;Month=m;Day=d;}voidDate::GetDate(char某){chart[20];_itoa(Year,,10);trcat(,\_itoa(Month,t,10);trcat(,t );trcat(,\_itoa(Day,t,10);trcat(,t);}claTime{intHour,Minute,Second;public:Time(inth=0,intm=0,int= 0)//时、分、秒C++面向对象程序设计实验指导{Hour=h;Minute=m;Second=;}voidSetTime(inth,intm,int){Hour=h;Minu te=m;Second=;}voidGetTime(char某);};voidTime::GetTime(char某){chart[20];_itoa(Hour,,10);trcat(,\_itoa(Minute,t,10);trcat(, t);trcat(,\}claDateTime:publicDate,publicTime{//公有派生public:DateTime():Date(),Time(){}DateTime(inty,intm,intd,inth,intmin,int):Date(y,m,d),Time(h, min,){}voidGetDateTime(char某);voidSetDateTime(inty,intm,intd,inth,intmin,int);};voidDateTime::GetDateTime(char某){char1[100],2[100];GetDate(1);GetTime(2);trcpy(,\日期和时间分别是:\trcat(,\trcat(,2);}voidDateTime::SetDateTime(inty,intm,intd,inth,intmin,int){Se tDate(y,m,d);SetTime(h,min,);}voidmain(void){Dated1(2003,1,30);char[200];d1.GetDate();cout <Timet1(12,25,50);t1.GetTime();cout<DateTimedt1(2003,2,4,8,20,15);dt1.GetDateTime();cout<dt1.SetDateTime(2003,12,30,23,50,20);dt1.GetDateTime();cout< }⑵上机要求将类DateTime改为由基类Date和Time私有派生,程序能否正确编译和执行,为什么?⑶写出实验报告。
实验三:继承和派生

实验三继承与派生1.实验目的(1)熟练掌握类的继承,能够定义和使用类的继承关系。
(2)掌握派生类的声明和实现方法。
(3)掌握类构造函数的初始化列表与作用域分辨符的使用方法。
(4)理解虚基类在解决二义性问题中的作用。
2.实验内容(1)定义Staff(员工)类,有Staff分别派生出Saleman(销售员)类和Manager (经理)类,再由Saleman(销售员)类和Manager(经理)类采用多重继承方式派生出新类SaleManager(销售经理)类。
要求:a.在Staff类中包含的数据成员有编号(num)、姓名(name)、出勤率(rateOfAttend)、基本工资(basicSal)和奖金(prize)。
在Saleman类中还包含数据成员:销售员提成比例(deductRate)和个人销售额(personAmount),在Manager类中还包含数据成员:经理提成比例(totalDeductRate)和总销售额(totalAmount)。
在SaleManager类中不包含其他数据成员。
b.各类人员的实发工资公式如下:员工实发工资=基本工资+奖金+出勤率销售员实发工资=基本工资+奖金+出勤率+个人销售额*销售员提成比例经理实发工资=基本工资+奖金+出勤率+总销售额*经理提成比例销售经理实发工资=基本工资+奖金+出勤率+个人销售额*销售员提成比例+总销售额*经理提成比例c.每个类都有构造函数、输出基本信息函数(Output)和输出实发工资函数(OutputW age)。
3.实验步骤(1)实验源程序//程序功能:熟悉类的继承与派生的基本应用#include<iostream>using namespace std;class Staff //定义员工类{protected:char name[20];float rateOfAttend;int num;int basicSal;int prize;int salary;public:Staff(int nu, char na[], float rate, int bac, int pe){num = nu;strcpy(name, na);rateOfAttend = rate;basicSal = bac;prize = pe;}void Output() const{cout << "员工的基本信息:\n";cout << "编号姓名出勤率基本工资奖金\n";cout << num << " "<< name << " "<< rateOfAttend << " "<< basicSal << " "<< prize << endl;}int OutputW age(float rate, int bac, int pe){salary = bac + pe * rate;return (salary);}};class Saleman:virtual public Staff //继承得到销售员类Saleman{protected:float deductRate;int personAmount;int lsalary;public:Saleman(int nu, char na[], float rate, int bac, int pe, int ded, int person):Staff(nu, na, rate, bac, pe){deductRate = ded;personAmount = person;}void Output() const{Staff::Output();cout << "提成比例:" << deductRate << endl;cout << "个人销售额:" << personAmount << endl;}int OutputW age(float rate, int bac, int pe, float ded, int person){lsalary = Staff:: OutputW age( rate, bac, pe) + ded * person;return (lsalary);}};class Manager:virtual public Staff //继承得到经理类Manager {protected:float totalDeductRate;int totalAmount;int rsalary;public:Manager(int nu, char na[], float rate, int bac, int pe, float totalr, int totala):Staff(nu, na, rate, bac, pe){totalDeductRate = totalr;totalAmount = totala;}void Output() const{Staff::Output();cout << "提成比例:" << totalDeductRate << endl;cout << "总销售额:" << totalAmount << endl;}int OutputW age(float rate, int bac, int pe, float totalr, int totala){rsalary = Staff:: OutputW age( rate, bac, pe) + totalr * totala;return(rsalary );}};class SaleManager:virtual public Saleman,virtual public Manager //有多重继承得到销售经理类{protected:int lrsalary;public:SaleManager(int nu, char na[], float rate, int bac, int pe, float ded, int person, float totalr, int totala):Staff(nu, na, rate, bac, pe),Saleman(nu, na, rate, bac, pe, ded, person),Manager(nu, na, rate, bac, pe, totalr, totala){}void Output() const{Staff::Output();cout << "提成比例:" << deductRate << endl;cout << "个人销售额:" << personAmount << endl;cout << "提成比例:" << totalDeductRate << endl;cout << "总销售额:" << totalAmount << endl;}int OutputW age(float rate, int bac, int pe, float ded, int person, float totalr, int totala){lrsalary = Staff:: OutputWage( rate, bac, pe) + ded * person + totalr * totala;return( lrsalary);}};void main(){Saleman objsale(101101, "LD", 0.88f, 1200, 800, 0.05f, 10000);Manager objmana(101102, "NXG", 0.90f, 2500, 1000, 0.10f, 20000);SaleManager objsalemana(101103, "HDY", 0.99f, 3500, 2000, 0.20f, 100000, 0.20f,150000);objsale.Output();cout << "销售员的实发工资:" << " ";cout << objsale.OutputWage(0.88f, 1200, 800, 0.05f, 10000) << endl;cout << endl;objmana.Output();cout << "经理的实发工资:" << " ";cout << objmana.OutputW age(0.90f, 2500, 1000, 0.10f, 20000) << endl;cout << endl;objsalemana.Output();cout << "销售经理的实发工资:" << " ";cout<<objsalemana.OutputW age(0.99f, 3500, 2000, 0.20f, 10000, 0.20f, 150000) << endl;cout << endl;}(2)编译并运行该程序。
继承派实验报告

一、实验目的1. 理解继承的概念及其在面向对象编程中的重要性。
2. 掌握不同继承方式(公有继承、私有继承、保护继承)下的基类成员在派生类中的访问权限。
3. 熟悉构造函数和析构函数在继承过程中的调用顺序和时机。
4. 培养动手实践能力,提高编程水平。
二、实验内容1. 创建一个基类`Base`,包含三个成员变量:`int`类型的`a`,`float`类型的`b`和`char`类型的`c`。
2. 创建三个派生类`DerivedPublic`,`DerivedPrivate`和`DerivedProtected`,分别采用公有继承、私有继承和保护继承的方式继承自基类`Base`。
3. 在每个派生类中添加一个构造函数,用于初始化基类成员和派生类特有的成员变量。
4. 在每个派生类中添加一个成员函数`display`,用于打印基类成员和派生类成员变量的值。
5. 在主函数中创建基类对象和派生类对象,并调用`display`函数打印成员变量的值。
三、实验步骤1. 创建基类`Base`,包含三个成员变量和相应的构造函数。
```cppclass Base {public:int a;float b;char c;Base(int a, float b, char c) : a(a), b(b), c(c) {}};```2. 创建三个派生类,分别采用公有继承、私有继承和保护继承的方式继承自基类`Base`。
```cppclass DerivedPublic : public Base {public:int d;DerivedPublic(int a, float b, char c, int d) : Base(a, b, c), d(d) {}void display() {cout << "DerivedPublic: a = " << a << ", b = " << b << ", c = " << c << ", d = " << d << endl;}};class DerivedPrivate : private Base {public:int d;DerivedPrivate(int a, float b, char c, int d) : Base(a, b, c), d(d) {}void display() {cout << "DerivedPrivate: a = " << a << ", b = " << b << ", c = " << c << ", d = " << d << endl;}};class DerivedProtected : protected Base {public:int d;DerivedProtected(int a, float b, char c, int d) : Base(a, b, c), d(d) {}void display() {cout << "DerivedProtected: a = " << a << ", b = " << b << ", c = " << c << ", d = " << d << endl;}};```3. 在主函数中创建基类对象和派生类对象,并调用`display`函数打印成员变量的值。
实验三 继承与派生

信息科学与工程学院《C++实验报告》班级:学号:姓名:教师:程磊二○一三年十一月实验三继承与派生一、实验目的1.学习声明和使用类的继承关系,声明派生类。
2.熟悉各种继承方式下对基类成员的访问控制。
一、实验内容1.声明一个基类Shape,在此基础上派生出Rectangle和Circle类,二者都具有GetArea()函数以计算对象的面积;使用Rectangle类再创建一个派生类Square。
实现并测试这些类。
2.声明一个object类,有数据成员weight及相应的操作函数,由此派生出box类,增加数据成员height和width及相应的操作函数,声明一个box对象,实现并测试这些类,同时观察构造函数和析构函数的调用顺序。
二、实验注意事项程序中,需要编写一个可执行函数与main主调函数,自主设计输入、输出值,使得结果可以由控制台显示输出。
三、实验程序代码程序一:#include <iostream>using namespace std;const float pi=3.14159;class shape {public:void Choose();};void shape::Choose(){cout<<"基类shape被调用!"<<endl<<endl;}class Rectangle: public shape {private:float l,w;public:Rectangle(float a,float b){l=a;w=b;}float GetArea(){return l*w;};};class Circle:public shape{private:float radius;public:Circle(float r){radius=r;}float GetArea(){return radius*radius*pi;};};class Square:public Rectangle{private:float z;public:Square(float c):Rectangle(c, c){z=c;}void print(){cout<<"派生类Square被调用!"<<endl<<endl;}; };void main(){ Rectangle MyRectangle(2,3);cout<<MyRectangle.GetArea()<<endl;MyRectangle.Choose();Circle MyCircle(4);cout<<MyCircle.GetArea()<<endl;MyCircle.Choose();Square MySquare(5);cout<<MySquare.GetArea()<<endl;MySquare.print();MySquare.Choose();}程序二:#include <iostream>using namespace std;class object{private:int weight;public:void print();};void object::print(){weight=1;cout<<"基类object中的print函数被调用"<<endl<<"weight="<<weight<<endl<<endl; }class box:public object{private:int height,width;public:box(){height=2;width=3;cout<<"构造函数box被调用!"<<endl;cout<<"height="<<height<<endl<<"width="<<width<<endl<<endl;}~box(){cout<<"析构函数~box被调用!"<<endl;cout<<"height="<<height<<endl<<"width="<<width<<endl<<endl;}};int main(){box Mybox;Mybox.print();return 0;}四、实验结果程序一:程序二:六、实验小结通过实验一我了解到了了如何声明和使用类的继承关系,声明派生类。
实验三--类的派生与继承

课程名称:通信软件基础成绩评定:实验项目名称:实验3:类的派生与继承指导教师:学生姓名:学号:专业班级:实验项目类型:验证性实验地点:实验时间:一、实验目的与要求:1. 理解继承的含义,掌握派生类的定义方法和实现。
2.理解公有继承下基类成员对派生类成员和派生类对象的可见性,能正确的访问继承层次中的各种类成员。
3.理解保护成员在继承中的作用。
4.理解虚基类在类的继承层次中的作用。
二、实验环境:(硬件环境、软件环境)1.windows 7操作系统2.VC++编译器三、实验过程:(内容、操作步骤、结果等)1.扩展学生管理系统,编写一个学生和教师数据输入和显示程序,学生数据有编号、姓名、班级和成绩等,教师数据有编号、姓名、职称和部门等。
将编号、姓名输入和显示设计成一个user类,作为学生类student和教师类teacher的基类。
代码:#include<iostream>using namespace std;class user{private:char number[20];//编号char name[20];//姓名public:user(){cout<<"请输入编号:";cin>>number;cout<<"请输入姓名:";cin>>name;}void show(){cout<<"编号:"<<number<<" 姓名:"<<name;}};class student: public user{private:char grade[20];//班级float score;//成绩public:student():user(){cout<<"请输入班级:";cin>>grade;cout<<"请输入成绩:";cin>>score;}湖南第一师范学院实验报告void show(){user::show();cout<<" 班级:"<<grade<<" 成绩:"<<score<<endl;}};class teacher:public user{private:char jobname[20];//职称char department[20];//部门public:teacher():user(){cout<<"请输入职称:";cin>>jobname;cout<<"请输入部门:";cin>>department;}void show(){user::show();cout<<" 职称:"<<jobname<<" 部门:"<<department<<endl;}};int main(){int flag,i;cout<<"请输入选项:\n"<<"0、退出\n"<<"1、学生数据输入\n"<<"2、教师数据输入"<<endl;cin>>flag;if(flag==1){ student M[2];for(i=0;i<2;i++)M[i].show();}if(flag==2){teacher N[2];for(i=0;i<2;i++)N[i].show();}if(flag==0)return 0;return 0;}2.建立基类vehicle,用来描述车辆的基本特征车轮数和承重。
第三次上机实验:继承与派生类上机实践指导

继承与派生类上机实践指导一.实验目的1.理解继承的含义,掌握派生类的定义方法和实现;2.理解公有继承下基类成员对派生类成员和派生类对象的可见性,能正确地访问继承层次中的各种类成员;3.理解保护成员在继承中的作用,能够在适当的时候选择使用保护成员以便派生类成员可以访问基类的部分非公开的成员;二.实验内容1. (1) 将例5.3的程序修改、补充,写成一个完整、正确的程序,用保护继承方式。
在程序中应包括输入数据的函数。
(2) 修改例5.3的程序,改为用公用继承方式。
上机调试程序,使之能正确运行并得到正确的结果。
对这两种继承方式作比较分析,考虑在什么情况下二者不能互相代替。
2. 调试运行Ex12.1需求分析:某小型公司的人员管理信息系统。
三类人员:经理(manager)、技术人员(technician)、销售人员(salesman);后期又增加一类人员:销售经理(sales_manager)。
要求存储这些人员的姓名、编号、级别、当月工资、计算月薪总额并显示全部信息。
(1)人员编号:基数为1000,每增加一名人员时,人员编号加1;(2)人员级别:所有人员初始级别为1,然后进行升级。
升级规则:经理为4级、技术人员为3级、销售人员为1级、销售经理为3级;(3)月薪计算:经理=固定月薪8000元;技术人员=100元/小时;销售人员=当月个人销售额*4%;销售经理=固定月薪5000+所辖部门当月销售额*5%。
2.2数据结构:struct employee {char *name; /* 人员姓名*/int indiveidualEmpNo; /* 人员编号*/int grade; /* 人员级别*/float accumPay; /* 月薪总额*/char employeeType; /* 人员类型(经理、技术人员、销售人员)};2.3 再考虑用三个过程分别负责升级、计算月薪和显示人员信息。
我们可以三个C 函数: Promote ()Pay ()DisplayStatus ()这种数据结构与过程分离有很多问题,例如增加一类人员---销售经理,则三个C 函数都必须重新编写。
继承与派生实验报告

继承与派生实验报告继承与派生实验报告引言:继承与派生是面向对象编程中的重要概念,通过继承,一个类可以派生出子类,从而实现代码的复用和扩展。
本文将通过实验来探讨继承与派生的概念、原理和应用。
实验目的:1. 理解继承与派生的概念和原理;2. 掌握如何在编程语言中实现继承和派生;3. 熟悉继承与派生的应用场景。
实验步骤:1. 创建父类:首先,我们创建一个名为"Animal"的父类,该类具有属性和方法,例如"age"和"eat()"。
2. 创建子类:接下来,我们创建一个名为"Cat"的子类,该类继承自"Animal"类。
在子类中,我们可以重写父类的方法或添加新的方法。
3. 实例化对象:通过实例化父类和子类的对象,我们可以调用它们的方法和访问它们的属性。
4. 测试继承与派生:我们可以通过调用父类和子类的方法,观察它们的行为是否符合预期。
实验结果:在创建父类"Animal"时,我们定义了一个"age"属性和一个"eat()"方法。
在创建子类"Cat"时,我们继承了父类的属性和方法,并添加了一个新的"meow()"方法。
在实例化父类对象时,我们可以通过调用"eat()"方法来模拟动物进食的行为。
而在实例化子类对象时,我们既可以调用从父类继承而来的"eat()"方法,也可以调用子类特有的"meow()"方法来模拟猫咪的叫声。
通过实验,我们发现继承与派生的优势在于代码的复用和扩展。
我们只需在父类中定义一次通用的属性和方法,然后让不同的子类继承父类,即可实现代码的复用。
同时,子类还可以通过重写父类的方法或添加新的方法,实现代码的扩展和个性化。
讨论与应用:继承与派生不仅仅局限于上述的父类和子类关系,它还可以在多层次的继承结构中发挥作用。
实验3 继承与派生

实验3 继承与派生(4学时)实验目的:1.学会从现有类派生出新类的方式。
2.了解基类成员在派生类中的访问控制。
3.熟悉派生类中构造函数和析构函数的调用顺序。
4.掌握虚基类的作用和用法。
实验内容:1.仔细阅读下列程序,写出运行结果。
#include <iostream.h>class A{public:A(int m){ cout<<"A constructor:"<<m<<endl; }~A(){ cout<<"A distructor"<<endl; }};class B{public:B(int n){ cout<<"B constructor:"<<n<<endl;}B(){cout<<"B distructor"<<endl;}};class C: public B,public A{public:C(int a,int b,int c,int d,int e):A(b),B(e),bb(c),aa(d){ cout<<"C constructor:"<<a<<endl; }~C(){ cout<<"C distructor"<<endl; }private:A aa;B bb;};int main(){ C cc(1,2,3,4,5); }分析:注意派生类和基类中构造函数和析构函数的调用顺序。
程序输出结果如下:B constructor:5A constructor:2A constructor:4B constructor:3C constructor:1C destructorB destructorA destructorA destructorB destructor2.定义一个Person类,数据成员包含能够保存姓名的变量name,其中有能够输出姓名的成员函数PrintName()。
实验报告3:派生与继承

(二 〇 一 五 年 十 一 月《面向对象程序设计》实验报告学校代码: 10128 学 号: 201220905060题 目:派生与继承 学生姓名:燕飞 学 院:理学院系 别:数学系 专 业:信息与计算科学 班 级:信计12-2 任课教师:侯睿一、实验目的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派生出摩托车(motorcycle)类,在继承过程中,注意把vehicle设置为虚基类。
如果不把vehicle设置为虚基类,会有什么问题?编程试试看。
三、实验程序1、#include <iostream>using namespace std;class Animal{public:int age;public:Animal(){};~Animal(){ };};class Dog:public Animal{public:Dog(){ };~Dog(){ };void SetAge(int n){age=n;}};int main() {Dog dog;dog.SetAge(10);cout<<"ok"<<endl;return 0;}2、#include<iostream>using namespace std;class BaseClass{private:public:BaseClass(){cout<<"BaseClass Construction!"<<endl;}~BaseClass(){cout<<"BaseClass Deconstruction!"<<endl;}};class DerivedClass:public BaseClass{public:DerivedClass( ){cout<<"Derivedlass Construction!"<<endl;}~DerivedClass( ){cout<<"DerivedClass Deconstruction!"<<endl;}};int main(){DerivedClass d;return 0;}3、#include<iostream>using namespace std;class vehicle {protected:float MaxSpeed;float weight;public:~vehicle(){}vehicle(float m,float w):MaxSpeed(m),weight(w){} virtual void Run (){cout<<"车已经启动啦!!!"<<endl<<endl;}virtual void Stop (){cout<<"vehicle已经停啦!!!"<<endl;};class bicycle: virtual public vehicle {protected:float Height;public:~bicycle(){}bicycle(float m,float w,float h):vehicle( m,w),Height(h){}void Run (){cout<<"The height of bicycle is:"<<Height<<endl<<endl;}void Stop (){cout<<"bicycle已经停啦!!!"<<endl;}};class motorcar: virtual public vehicle {protected:int SeatNum;public:~motorcar(){}motorcar(float m,float w,float s):vehicle( m,w),SeatNum(s){}void Run (){cout<<"The number of motorcar's seat is:"<<SeatNum<<endl<<endl;}void Stop (){cout<<"motorcar已经停啦!!!"<<endl;}};class motorcycle: public bicycle, public motorcar{public:~motorcycle(){}motorcycle(float m,float w,float h,float s):vehicle( m,w),bicycle( m,w,h), motorcar(m,w,s){} void Run (){cout<<"MaxSpeed:"<<MaxSpeed<<endl;cout<<"weight:"<<weight<<endl;cout<<"The height is:"<<Height<<endl;cout<<"The number of seat is:"<<SeatNum<<endl;}void Stop ()cout<<"motorcycle已经停啦!!!"<<endl;}};int main(){vehicle a(108,53);bicycle b(180,50,2);motorcar c(180,80,5);motorcycle d(120,90,1.2,3);vehicle *p[4]={&a,&b,&c,&d };for(int i=0;i<4;i++){p[i]->Stop();p[i]->Run();}return 0;}四、实验结果1、2、3、五、实验总结学习了声明和使用了类的继承关系,声明派生类,熟悉不同继承方式下对基类成员的访问控制,学习利用虚基类解决二义性问题。
实验三 类的继承与派生

实验三类的继承与派生实验目的1.掌握类及类的声明2.掌握对象的定义和使用3.掌握接口9的定义与实现实验内容1. 使用类来封装对象的属性和功能编写一个Java程序,该程序中有3个类:Trangle、Lader和Circle,分别用来刻画“三角形”、“梯形”和“圆形”。
具体要求如下:Trangle类具有类型为double的三个边(sideA,sideB,sideC),以及周长(length)、面积(area)属性,Trangle类具有返回周长(getLength)、面积(getArea)以及修改三个边(setABC)的功能。
另外还有一个boolean型的属性(boo),该属性用来判断三个数是否构成一个三角形。
Lader类具有类型为double的上底(above)、下底(bottom)、高(height)、面积(area)属性,具有返回面积(getArea)的功能。
Circle类具有类型为double的半径(radius)、周长(length)和面积(area)属性,具有返回周长(getLength)、面积(getArea)的功能。
把程序中的代码补充完整,并查看结果。
// Trangle.javaclass Trangle//三角形{double sideA,sideB,sideC,area,length;boolean boo;public Trangle(double a,doubleb,double c){//带参数的构造方法setABC(a,b,c);}double getLength(){//方法体,要求计算出length的值并返回【补充代码…仿照getArea()方法编写】}public double getArea(){if(boo){double p=(sideA+sideB+sideC)/2.0;area=Math.sqrt(p*(p-sideA)*(p-sideB)*(p-sideC)) ;return area;}else{System.out.println("不是一个三角形,不能计算面积");return 0;}}public void setABC(double a,doubleb,double c){//参数a,b,c分别赋值给sideA,sideB,sideC【补充代码…】if(【补充代码】) //a,b,c构成三角形的条件表达式{【补充代码】 //给boo赋值。
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;}上述代码示例了如何使用派生类创建对象,并访问基类的属性和派生类自己的属性。
实验三 继承和类的派生

实验三类的派生与继承实验目的和要求1 掌握继承和派生类的概念。
2 掌握派生类对基类的继承。
3 了解多继承。
实验内容1. 编写一个程序,其中有一个书类book,其数据包括书号、书名、定价、出版社及出版时间:有一个作者类author,其数据成员包括姓名、年龄和写作时间,每个类都有相应的输入输出。
以此两个为基类派生出图书查询卡card,并增加一个数据成员表示书籍系统名称,以及一个可以显示系统名称、书名、作者、作者年龄、出版时间、出版社和定价等数据的函数。
2. 设计一个大学的类系统,学校中有学生、教师,每种人员都有自己的特性,他们之间有相同的地方(以 person 类为基类,有姓名、编号),又有各自不同的特性(学生:专业、平均成绩;教师:职称、工资)。
利用继承机制定义这个系统中的各个类,要求输入姓名等信息后再将这些信息输出。
实验原理:1、继承与派生的概念及目的;2、派生类大的声明方式、构成以及访问属性;3、多继承的声明方法;4、含有子对象的派生类的声明方式以及执行顺序;实验内容一:编程思想:编程过程中考虑到过程较为复杂,我采用了分步、分块编程的方法,使得程序的功能逐步地实现。
程序的基本框架如下:第一步:因为考虑到book和author中都需要输入和时间有关的变量,所以将时间作为它们共同的基类,向它们传递时间变量的属性。
Time类是一个比较基本的类的建立,在第一章中已经可以较为熟练地掌握。
第二步:实现书籍基本信息的输入和输出。
此步中用到了继承,因为此类中需要建立出版时间,所以建立了一个Time类的对象:bpubt。
在Book类中设计数据的输入输出函数,并在输入输出函数中通过对象bpubt调用时间类的输入输出函数。
编程过程中,Book类的功能通过以下代码实现,并检查运行结果无误。
#include<iostream>#include<stdlib.h>#include<string>using namespace std;class Time{private:int day;int month;int year;public:Time(int d=0,int m=0,int y=0){ day=d;month=m;year=y;}void setin(){cout<<"请输入时间:"<<endl; cin>>day>>month>>year;}void setout(){cout<<day<<"/"<<month<<"/"<<year<<en dl;}};class book:public Time{private:float bp;int bnum;string bname;string bpubl;Time bpubt;public:void setin() {cout<<"请输入书的简单情况:"<<endl;cin>>bnum>>bname>>bp>>bpubl; bpubt.setin();}void setout(){cout<<bnum<<endl;cout<<bname<<endl;cout<<bp<<endl;cout<<bpubl<<endl;bpubt.setout();}};int main(){book book1;book1.setin();book1.setout();system("PAUSE");return 0;}运行结果:在编写过程中遇到字符串的输入问题,通过调用头文件#include<string.h>得以解决。
[C++]继承和派生实验报告
![[C++]继承和派生实验报告](https://img.taocdn.com/s3/m/1d9eccc56529647d272852e1.png)
运行结果:修改过后的程序代码如下:#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,我们可以看到其对程序运行结果的影响。
这种灵活性,使得我们可以根据具体需求,定制不同的派生类,实现更加个性化的功能。
实验三-派生类与继承

实验三派生类与继承一、实验目的1、学习类的继承,能够定义和使用类的继承关系。
2、学习派生类的声明与定义方法。
3、掌握类的定义和对象的声明。
4、熟悉公有派生和私有派生的访问特性。
5、掌握派生类构造函数和析构函数的执行顺序。
6、掌握利用访问声明调整基类成员在派生类中的访问属性。
二、试验内容1、下面的程序可以输出ASCII字符与所对应的数字的对照表。
修改下列程序,使其可以输出字母a到z(或任意两个字符间)与所对应的数字的对照表。
class table{public:table(int p){i=p;}void ascii(void);protected:int i;};void table::ascii(void){int k=1;for (;i<127;i++){cout<<setw(4)<<i<<" "<<(char)i;if((k)%12==0)cout<<"\n";k++;}cout<<"\n";}class der_table:public table{public:der_table(int p,char *m):table(p){c=m;}void print(void);protected:char *c;};void der_table::print(void){cout<<c<<"\n";table::ascii();}int main(){der_table obl(32,"ASCII value---char");obl.print();return 0;}提示:修改后的主程序为:int main(){der_table ob('a','z',"ASCII value---char");ob.print();return 0;}#include<iostream.h>class table{public:table(int p){i=p;}void ascii(void);protected:int i;};void table::ascii(void){int k=1;for (;i<123;i++){cout<<i<<(char)i<<" ";if((k)%12==0)cout<<endl;k++;}cout<<endl;}class der_table:public table{public:der_table(int p,char *m):table(p){c=m;}void print(void);protected:char *c;};void der_table::print(void){cout<<c<<endl;table::ascii();}int main(){der_table ob('a',"ASCII value---char");ob.print();return 0;}2、已有类Time和Date,要求设计一个派生类Birthtime,它继承类Time 和Date,并且增加一个数据成员Childname用于表示小孩的名字,同事设计主程序显示一个小孩的出生时间和名字。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三继承和派生类1.调试下列程序,并对程序进行修改后再调试,指出调试中的出错原因。
#include <iostream.h>
class A
{
public:
void seta(int i)
{ a=i; }
int geta()
{ return a; }
public:
int a;
};
class B:public A
{
public:
void setb(int i)
{ b=i; }
int getb()
{ return b; }
void show()
{ cout<<"A::a="<<a<<endl; } //语句9 public:
int b;
};
void main()
{
B bb; //语句1
bb.seta(6); //语句2
bb.setb(3); //语句3
bb.show(); //语句4
cout<<"A::a="<<bb.a<<endl; //语句5
cout<<"B::b="<<bb.b<<endl; //语句6
cout<<"A::a="<<bb.geta()<<endl; / /语句7
cout<<"B::b="<<bb.getb()<<endl; //语句8 }
按下列要求对程序进行修改,然后调试,对出现的错误分析其原因。
(1)将派生类B的继承方式改为private时,会出现哪些错误和不正常现象?为什么?
(2)将派生类B的继承方式改为protected时,会出现哪些错误和不正常现象?为什么?
(3)将派生类B的继承方式恢复为public后,再将类A中数据成员a的访问权限改为private时,会出现哪些错误和不正常现象?为什么?
(4)派生类B的继承方式仍为public,将类A中数据成员a的访问权限改为protected时,会出现哪些错误和不正常现象?为什么?
2.定义一个基类MyArray,基类中可以存放一组整数。
class MyArray
{
public:
MyArray(int leng);
~MyArray();
void Input();
void Display();
protected:
int *alist; //指向动态申请的一组空间
int length; //整数的个数
};
基类中有构造函数、析构函数、输入数据和输出数据的函数。
设计主函数对所定义的类进行调试。
下同。
3.定义一个类SortArray继承自MyArray,在该类中定义函数实现排序功能。
4.定义一个类ReArray继承自MyArray,在该类中定义函数实现逆转功能。
5.定义一个类AverArray继承自MyArray,在该类中定义函数Aver求解数组的平均值。
6.定义NewArray类,同时继承了SortArray, ReArray 和AverArray,使得NewArray类的对象同时具有排序、逆转和求平均值的功能。
在继承的过程中声明为虚基类,体会虚基类在解决二义性问题中的作用。
#include <iostream.h>
class MyArray
{
public:
MyArray(int leng)
{
length=leng;
alist=new int[length];
}
~MyArray()
{
delete alist;
}
void Input();
void Display();
protected:
int *alist; //指向动态申请的一组空间
int length; //整数的个数
};
void MyArray::Input()
{
for(int i=0;i<length;i++)
{
cin>>*(alist+i);
}
}
void MyArray::Display()
{
for(int j=0;j<length;j++)
{
cout<<" "<<*(alist+j);
}
cout<<endl;
}
class SortArray:virtual public MyArray //排序{
public:
SortArray(int leng):MyArray(leng)
{
}
void paixu();
};
void SortArray::paixu()
{
for(int i=0;i<length;i++)
{
for(int j=i;j<length;j++)
if(*(alist+i)>*(alist+j))
{int a;
a=*(alist+i);
*(alist+i)=*(alist+j);
*(alist+j)=a;
}
}
Display();
}
class ReArray:virtual public MyArray //翻转{
public:
ReArray (int leng):MyArray(leng)
{
}
void fanzhuan();
};
void ReArray::fanzhuan()
{ int i=0;
int j=(length-1);
for(i;i<length/2;i++)
{
int tem=*(alist+i);
*(alist+i)=*(alist+length-i-1);
*(alist+length-i-1)=tem;
}
Display();
}
class AverArray:virtual public MyArray //平均值
{
public:
AverArray(int leng):MyArray(leng)
{
}
void pingjun();
};
void AverArray::pingjun()
{ int sum=0;
for(int i=0;i<length;i++)
{
sum+=*(alist+i);
}
int ave=sum/length;
cout<<"average is"<<ave<<endl;
}
class NewArray:public SortArray,public ReArray,public AverArray
{
public: NewArray(int leng):SortArray(leng),ReArray(leng),AverArray(leng),My Array(leng)
{
}
};
void main()
{
NewArray aa(5);
aa.Input();
aa.Display();
aa.paixu();
aa.fanzhuan();
aa.pingjun();
}。