视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
C++实验2
2025-09-28 02:14:45 责编:小OO
文档
面向对象程序设计实验指导书(四)

实验名称:类的继承

实验目的:

学习定义和使用类的继承关系,定义派生类。熟悉不同继承方式下对基类成员的访问控制。学习多继承。

实验主要内容:

1、学习如何进行类的继承,并认识不同方式继承时的访问属性;

2、观察基类和派生类构造函数和析构函数的调用顺序;

3、定义多继承,并观察多继承时基类和派生类调用情况;

实验原理及步骤要求:

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

#include

using namespace std;

class animal{

public:

int age;

animal()

{cout<<"Constructing animal"<~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="<cout<<"num="<};

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="<~BaseClass()

{cout<<"BaseClass delete sucess"<};

class DerivedClass:public BaseClass

{

private:

BaseClass d;

public:

DerivedClass(int n):BaseClass(n),d(n)

{cout<<"DerivedClass make sucess"<~DerivedClass()

{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="<cout<<"SeatNum="<cout<<"L="<return0;

}

四、下面是一个定义好的关于学生的类,其中一个是基类,另一个是派生类

#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<name<<""<age<<"yrs\\n

};

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<name<<"$"<salary<<"\\n";}

};

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<<""<phone<<"ph"<state<<"\\n";

}

};

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;

}下载本文

显示全文
专题