实验名称:类的继承
实验目的:
学习定义和使用类的继承关系,定义派生类。熟悉不同继承方式下对基类成员的访问控制。学习多继承。
实验主要内容:
1、学习如何进行类的继承,并认识不同方式继承时的访问属性;
2、观察基类和派生类构造函数和析构函数的调用顺序;
3、定义多继承,并观察多继承时基类和派生类调用情况;
实验原理及步骤要求:
一、定义一个基类Animal,有私有整型成员变量age,构造其公有派生类dog,在其成员函数SetAge(int n)中直接给age赋值,看看会有什么问题,把age改成公有成员变量,还会有问题吗?
#include using namespace std; class animal{ public: int age; animal() {cout<<"Constructing animal"< }; class dog:public animal{ private: int num; public: dog(int i,int j) {age=i;num=j;} SetAge(int n) {age=n;} void show() {cout<<"age="< int main() {dog A(1,10); A.show(); A.SetAge(5); A.show(); return0; } 二、定义一个基类BaseClass,有整型成员变量Number,构造其派生类DerivedClass,观察构造函数和析构函数的执行情况; #include using namespace std; class BaseClass{ private: int number; public: BaseClass(int n){ number=n; cout<<"BaseClass make sucess"< void show1() {cout<<"number="< {cout<<"BaseClass delete sucess"< class DerivedClass:public BaseClass { private: BaseClass d; public: DerivedClass(int n):BaseClass(n),d(n) {cout<<"DerivedClass make sucess"< {cout<<"DerivedClass delete sucess"< int main() { DerivedClass student(100731); student.show1(); return0; } 三、定义一个自行车(bicycle)类和一个汽车(motorcar)类。自行车(bicycle)类有高度(Height)等属性,汽车(motorcar)类有座位数(SeatNum)等属性。从bicycle和motorcar派生出摩托车(motorcycle)类。 #include using namespace std; class motorcar; class bicycle{ private: int Hight; public: bicycle(int Hight1) {Hight=Hight1;}int getbicycle() {return Hight;} ~bicycle() {cout<<"sucess"< class motorcar{ private: int SeatNum; public: motorcar(int SeatNum1) {SeatNum=SeatNum1;} int getmotorcar() {return SeatNum;} ~motorcar() {cout<<"sucess"< class motorcycle:public bicycle,private motorcar{ private: int L; public: motorcycle(int Hight1,int SeatNum1,int L1):bicycle(Hight1),motorcar(SeatNum1) {L=L1;} int getmotorcycle() {return L;} int getmotorcar() {return motorcar::getmotorcar();} ~motorcycle() {cout<<"sucess"< int main() {motorcycle obj(12,15,10); cout<<"Hight="< } 四、下面是一个定义好的关于学生的类,其中一个是基类,另一个是派生类 #include Using namespace std; enum year{fresh,soph,junior,senior,grad}; enum support{ta,a,fellowship,other}; class student {protected: int student_id; float gpa; public: student(const char*nm,int id,float g) { strcpy(name,nm); student_id=id; gpa=g; college[0]='\\0'; yr=fresh; major[0]='\\0'; } char name[30]; char college[15]; year yr; char major[10]; void print(); void read(); }; class grad_student:public student { support s; public: grad_student(const char*nm,support x,int id,float g):student(nm,id,g) { s=x; dept[0]='\\0'; thesis[0]='\\0'; } char dept[30]; char thesis[80]; void print(); void read(); }; int main() { grad_student obj("小红 obj.print1(); return0; } 两个类中,函数print()和函数read()都仅是函数原型,要求写出各自完整的函数,并写一个主函数调用测试以上各种功能。 五、下面是一个多层派生的类结构,写一主函数调用类的不同层次,并测试其功能 #include using namespace std; class proc_data{ public: void print() {cout<<"proc_data\\n";} }; struct X {int age;char name[20]; }; class X_data:public proc_data{ X*d; public: X_data(int i,const char*n) {d=new X;d->age=i;strcpy(d->name,n);} ~X_data(){delete d;} void print() {cout< }; struct Y {int salary;char name[20]; }; class Y_data:public proc_data{ Y*d; public: Y_data(int i,const char*n) {d=new Y;d->salary=i;strcpy(d->name,n);} ~Y_data(){delete d;} void print() {cout< }; struct Z {long int phone;char state[5]; }; class Z_data:public Y_data {Z*z; public: Z_data(int i,const char*n,long int ph,const char*st):Y_data(i,n) {z=new Z;z->phone=ph;strcpy(z->state,st);} ~Z_data(){delete z;} void print(){Y_data::print(); cout<<""< } }; int main() { proc_data A; A.print(); X_data x(19,"shiyan”); x.print(); Y_data y(20,"xiao"); y.print(); Z_data z1(19,"li z1.print(); return0; }下载本文