C上机实验报告实验五文档格式.docx

上传人:b****6 文档编号:19521480 上传时间:2023-01-07 格式:DOCX 页数:8 大小:16.60KB
下载 相关 举报
C上机实验报告实验五文档格式.docx_第1页
第1页 / 共8页
C上机实验报告实验五文档格式.docx_第2页
第2页 / 共8页
C上机实验报告实验五文档格式.docx_第3页
第3页 / 共8页
C上机实验报告实验五文档格式.docx_第4页
第4页 / 共8页
C上机实验报告实验五文档格式.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

C上机实验报告实验五文档格式.docx

《C上机实验报告实验五文档格式.docx》由会员分享,可在线阅读,更多相关《C上机实验报告实验五文档格式.docx(8页珍藏版)》请在冰豆网上搜索。

C上机实验报告实验五文档格式.docx

3.实验内容及实验步骤

1.编写程序定义基类Animal,成员变量age定义为私有的。

构造派生类dog,在其成员函数SetAge(intn)中直接对age赋值时,会出现类似以下的错误提示:

errorC2248:

‘age’:

cannotaccessprivatememberdeclaredinclass‘Animal’

把age改为公有成员变量后重新编译就可以了。

程序名:

lab7_1.cpp。

2.编写程序定义一个基类BaseClass,构造其派生类DerivedClass,在构造函数和析构函数中用cout输出提示信息,观察构造函数和析构函数的执行情况。

lab7_2.cpp。

3.用debug功能跟踪程序lab7_2的执行过程,观察基类和派生类的构造函数和析构函数的执行情况。

4.编写程序定义一个车(vehicle)基类,由此派生出自行车(bicycle)类、汽车(motorcar)类,注意把vehicle派生为虚基类。

再从bicycle和motorcar派生出摩托车(motorcycle)类,在main()函数中测试这个类。

程序名:

lab7_3.cpp。

编译成功后,把vehicle设置为非虚基类,再编译一次,此时系统报错,无法编译成功。

这是因为若不把vehicle设置为虚基类,会出现二义性错误,程序不能成功编译。

4.思考题

1.如何在已有的类的基础上设计新的类?

采用类的派生的方法,利用基类派生出子类,子类继承基类的属性,从而在已有基类的基础上设计新的派生类,模式如下:

class派生类名:

继承方式基类名1,继承方式基类名2,…,继承方式基类名n

{

派生类成员声明;

};

2.基类和派生类对象的构造顺序是怎样的?

先调用基类的构造函数,然后再调用内嵌对象(派生类中的对象)的构造函数。

基类构造函数的调用顺序是按照派生类定义时的顺序,而内嵌对象的构造函数调用顺序是按照成员在类中声明的顺序。

3.如何利用虚基类解决二义性问题?

将共同基类设置为虚基类,语法为:

virtual继承方式基类名

5.源程序

Lab7_1.cpp

#include<

iostream>

usingnamespacestd;

classAnimal//Animal类

/*private:

intage;

*/

public:

Animal(){}

~Animal(){}

Animal(int);

classDog:

publicAnimal//Dog类,Animal的公有派生类

private:

intnumber;

Dog(){}

~Dog(){}

Dog(int,int);

voidsetAge(int);

voidshowNumber();

voidshowAge();

Animal:

:

Animal(inta)//Animal构造函数

age=a;

}

Dog:

Dog(intn,inta)//Dog构造函数

number=n;

voidDog:

setAge(intn)//Dog成员函数,setAge

age=n;

//数据输出函数

showNumber()

cout<

<

"

Number:

number<

endl;

showAge()

Age:

age<

intmain()

Dogdog1(12,0);

dog1.setAge(7);

dog1.showNumber();

dog1.showAge();

return0;

Lab_2

classBaseClass

intgrade;

intpopulation;

BaseClass(intg,intp)//BaseClass的构造函数

{

grade=g;

population=p;

cout<

constructingBaseClass"

}

~BaseClass()//析构

destructingBaseClass"

classDerivedClass:

publicBaseClass

charname;

DerivedClass(intg,intp,charn):

BaseClass(g,p)//DerivedClass的构造函数

name=n;

constructingDerivedClass"

~DerivedClass()

destructingDerivedClass"

DerivedClassa(7,55,'

A'

);

Lab_3

classVehicle

floatmaxspeed;

floatweight;

Vehicle(){}

Vehicle(floatm,floatw)

maxspeed=m;

weight=w;

~Vehicle(){}

voidrun()

Vehiclerunning"

voidstop()

Vehiclestopping"

classBicycle:

virtualpublicVehicle

floatheight;

Bicycle(floatm,floatw,floath):

Vehicle(m,w)

height=h;

Bicycle(floath)

~Bicycle(){}

classMotorcar:

intseatnum;

Motorcar(floatm,floatw,ints):

seatnum=s;

~Motorcar(){}

Motorcar(floats)

classMotorbicycle:

publicBicycle,publicMotorcar

Motorbicycle(floatm,floatw,floath,ints):

Vehicle(m,w),Bicycle(h),Motorcar(s){}

voidshowInformation()

Themaxspeedofthismotorbicycleis:

maxspeed<

Theweightofthismotorbicycleis:

weight<

Theheightofthismotorbicycleis:

height<

Theseatnumberofthismotorbicycleis:

seatnum<

Motorbicyclea(60,21.5,45.8,2);

a.run();

a.showInformation();

a.stop();

6.运行结果

Lab7_1

age为Animal的私有成员数据时:

编译报错

age为Animal的公有成员数据时:

正常运行

7.心得体会:

熟悉并了解了如果利用基类进行派生,得到派生类,明白了public,protect,private三种派生类型的区别,能够较好的利用继承的方法,来创建新的子类。

并且学习了使用虚基类继承的方式,使基类中的成员对象仅被创建一次,收获颇多。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教学研究 > 教学计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1