c++试验编程.docx

上传人:b****7 文档编号:10138868 上传时间:2023-02-08 格式:DOCX 页数:23 大小:151.21KB
下载 相关 举报
c++试验编程.docx_第1页
第1页 / 共23页
c++试验编程.docx_第2页
第2页 / 共23页
c++试验编程.docx_第3页
第3页 / 共23页
c++试验编程.docx_第4页
第4页 / 共23页
c++试验编程.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

c++试验编程.docx

《c++试验编程.docx》由会员分享,可在线阅读,更多相关《c++试验编程.docx(23页珍藏版)》请在冰豆网上搜索。

c++试验编程.docx

c++试验编程

武汉工业学院

数学与计算机学院

C++程序设计实验报告

专业:

计算机大类

班级:

1007班

学号:

*******

姓名:

****

指导教师:

****

 

2011年11月23日

实验五

实验名称:

继承与派生

实验内容:

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

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

源代码:

#include

usingnamespacestd;

classAnimal

{

public:

intage;

};

classdog:

publicAnimal

{

public:

voidSetAge(intn)

{

//cout<<"改变前的Animal类的成员变量age="<

age=n;

cout<<"改变后的Animal类的成员变量age="<

}

};

classBaseClass

{

public:

BaseClass()

{

cout<<"BaseClass类的默认构造函数被调用"<

Number=0;

}

BaseClass(inti)

{

cout<<"BaseClass类的带参数的构造函数被调用"<

Number=i;

}

BaseClass(BaseClass&b1)

{

cout<<"BaseClass类的拷贝构造函数被调用"<

Number=b1.Number;

}

~BaseClass()

{

cout<<"BaseClass类的析构函数被调用"<

}

intNumber;

};

classDerivedClass:

publicBaseClass

{

public:

DerivedClass()

{

cout<<"DerivedClass类的默认构造函数被调用"<

d=0;

}

DerivedClass(inti)

{

cout<<"DerivedClass类的带参数的构造函数被调用"<

d=i;

}

DerivedClass(inti,intj):

BaseClass(i)

{

cout<<"DerivedClass类的带参数的构造函数被调用"<

d=j;

}

DerivedClass(DerivedClass&d1):

BaseClass(d1)

{

cout<<"DerivedClass类的拷贝构造函数被调用"<

d=d1.d;

}

~DerivedClass()

{

cout<<"DerivedClass类的析构函数被调用"<

}

private:

intd;

};

voidmain(void)

{

Animala;

a.age=2;

cout<<"改变前的Animal类的成员变量age="<

dogDOG;

DOG.SetAge(6);

DerivedClassder1;

DerivedClassder2(3);

DerivedClassder3(4,5);

DerivedClassder4=der3;

}

运行结果截图:

实验小结:

通过本次实验,我明白了如何继承派生一个类,及如何定义派生类的构造函数,构造函数是怎样执行的。

基类数据成员在派生后的访问权限发生改变。

 

实验六

实验名称:

虚基类

实验内容:

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

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

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

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

源代码:

#include

usingnamespacestd;

classvehicl

{

public:

vehicl()

{

cout<<"vehicl类的默认构造函数被调用"<

MaxSpeed=0;

Weight=0;

}

vehicl(inti,intj)

{

cout<<"vehicl类的带参数构造函数被调用"<

MaxSpeed=i;

Weight=j;

}

vehicl(vehicl&v)

{

cout<<"vehicl类的拷贝构造函数被调用"<

MaxSpeed=v.MaxSpeed;

Weight=v.Weight;

}

~vehicl()

{

cout<<"vehicl类的析构函数被调用"<

}

intMaxSpeed;

intWeight;

voidrun();

voidstop();

};

voidvehicl:

:

run(void)

{

cout<<"此辆车在工作"<

}

voidvehicl:

:

stop(void)

{

cout<<"此辆车已停止工作"<

}

classbicycle:

publicvirtualvehicl

{

public:

bicycle()

{

cout<<"bicycle类的默认构造函数被调用"<

Height=0;

}

bicycle(intb1)

{

cout<<"bicycle类的带参数的构造函数被调用"<

Height=b1;

}

bicycle(intb1,intb2,intb3):

vehicl(b1,b2)

{

cout<<"bicycle类的带参数的构造函数被调用并向基类传递参数"<

Height=b3;

}

bicycle(bicycle&b):

vehicl(b)

{

cout<<"bicycle类的拷贝的构造函数被调用"<

Height=b.Height;

}

~bicycle()

{

cout<<"bicycle类的析构函数被调用"<

}

intHeight;

};

classmotorcar:

publicvirtualvehicl

{

public:

motorcar()

{

cout<<"motorcar类的默认构造函数被调用"<

SeatNum=0;

}

motorcar(intm1)

{

cout<<"motorcar类的带参数的构造函数被调用"<

SeatNum=m1;

}

motorcar(intm1,intm2,intm3):

vehicl(m1,m2)

{

cout<<"motorcar类的带参数的构造函数被调用并向基类传递参数"<

SeatNum=m3;

}

motorcar(motorcar&m):

vehicl(m)

{

cout<<"motorcar类的拷贝的构造函数被调用"<

SeatNum=m.SeatNum;

}

~motorcar()

{

cout<<"motorcar类的析构函数被调用"<

}

intSeatNum;

};

classmotorcycle:

publicbicycle,publicmotorcar

{

public:

motorcycle()

{

cout<<"motorcycle类的默认构造函数被调用"<

}

motorcycle(intm1,intm2,intm3):

motorcar(m1,m2,m3)

{

cout<<"motorcycle类的带参数的构造函数被调用并向基类传递参数"<

}

motorcycle(intm1,intm2,intm3,intm4):

motorcar(m1,m2,m3),bicycle(m1,m2,m4)

{

cout<<"motorcycle类的带参数的构造函数被调用并向基类传递参数"<

}

motorcycle(motorcycle&m):

motorcar(m),bicycle(m)

{

cout<<"motorcycle类的拷贝构造函数被调用"<

}

~motorcycle()

{

cout<<"motorcycle类的析构函数被调用"<

}

};

voidmain(void)

{

vehicla1;

vehicla2(2,3);

a2.run();

a2.stop();

bicyclea3;

bicyclea4(1,2,3);

motorcara5;

motorcara6(4,5,6);

motorcyclea7;

motorcyclea8(2,3,4);

motorcyclea9(2,3,4,5);

motorcyclea10=a9;

}

运行结果截图:

实验小结:

通过本次实验,我体会到在多重继承的过程中会产生二义性,可通过定义虚基类的方式来消除二义性。

定义虚基类后,派生类中所有可能产生二义性的数据成员只会出现一次。

 

实验七

实验名称:

多态性

实验内容:

定义一个车(vehicl)基类,有run、stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类;从bicycle和motorcar派生出摩托车(motorcycle)类,它们都有run、stop等成员函数。

观察虚函数的作用。

源代码:

#include

usingnamespacestd;

classvehicl

{

public:

vehicl()

{

cout<<"vehicl类的默认构造函数被调用"<

MaxSpeed=0;

Weight=0;

}

vehicl(inti,intj)

{

cout<<"vehicl类的带参数构造函数被调用"<

MaxSpeed=i;

Weight=j;

}

vehicl(vehicl&v)

{

cout<<"vehicl类的拷贝构造函数被调用"<

MaxSpeed=v.MaxSpeed;

Weight=v.Weight;

}

~vehicl()

{

cout<<"vehicl类的析构函数被调用"<

}

intMaxSpeed;

intWeight;

voidrun();

voidstop();

};

voidvehicl:

:

run(void)

{

cout<<"此车在工作"<

}

voidvehicl:

:

stop(void)

{

cout<<"此车已停止工作"<

}

classbicycle:

publicvirtualvehicl

{

public:

bicycle()

{

cout<<"bicycle类的默认构造函数被调用"<

Height=0;

}

bicycle(intb1)

{

cout<<"bicycle类的带参数的构造函数被调用"<

Height=b1;

}

bicycle(intb1,intb2,intb3):

vehicl(b1,b2)

{

cout<<"bicycle类的带参数的构造函数被调用并向基类传递参数"<

Height=b3;

}

bicycle(bicycle&b):

vehicl(b)

{

cout<<"bicycle类的拷贝的构造函数被调用"<

Height=b.Height;

}

~bicycle()

{

cout<<"bicycle类的析构函数被调用"<

}

virtualvoidrun(void)

{

cout<<"此自行车在工作"<

}

virtualvoidstop(void)

{

cout<<"此自行车已停止工作"<

}

intHeight;

};

classmotorcar:

publicvirtualvehicl

{

public:

motorcar()

{

cout<<"motorcar类的默认构造函数被调用"<

SeatNum=0;

}

motorcar(intm1)

{

cout<<"motorcar类的带参数的构造函数被调用"<

SeatNum=m1;

}

motorcar(intm1,intm2,intm3):

vehicl(m1,m2)

{

cout<<"motorcar类的带参数的构造函数被调用并向基类传递参数"<

SeatNum=m3;

}

motorcar(motorcar&m):

vehicl(m)

{

cout<<"motorcar类的拷贝的构造函数被调用"<

SeatNum=m.SeatNum;

}

~motorcar()

{

cout<<"motorcar类的析构函数被调用"<

}

voidrun(void)

{

cout<<"此汽车在工作"<

}

voidstop(void)

{

cout<<"此汽车已停止工作"<

}

intSeatNum;

};

classmotorcycle:

publicbicycle,publicmotorcar

{

public:

motorcycle()

{

cout<<"motorcycle类的默认构造函数被调用"<

}

motorcycle(intm1,intm2,intm3):

motorcar(m1,m2,m3)

{

cout<<"motorcycle类的带参数的构造函数被调用并向基类传递参数"<

}

motorcycle(intm1,intm2,intm3,intm4):

motorcar(m1,m2,m3),bicycle(m1,m2,m4)

{

cout<<"motorcycle类的带参数的构造函数被调用并向基类传递参数"<

}

motorcycle(motorcycle&m):

motorcar(m),bicycle(m)

{

cout<<"motorcycle类的拷贝构造函数被调用"<

}

~motorcycle()

{

cout<<"motorcycle类的析构函数被调用"<

}

voidrun(void)

{

cout<<"此摩托车在工作"<

}

voidstop(void)

{

cout<<"此摩托车已停止工作"<

}

};

voidmain(void)

{

vehicl*b1;

bicycle*b2;

motorcar*b3;

vehicla2(2,3);

bicyclea4(1,2,3);

motorcara6(4,5,6);

motorcyclea9(2,3,4,5);

motorcyclea10=a9;

b1=&a9;

b1->run();

b1->stop();

b2=&a9;

b2->run();

b2->stop();

b3=&a9;

b3->run();

b3->stop();

}

运行结果截图:

实验小结:

通过本次实验,我明白了如何实现多态,通过定义虚函数的方式,实现动态访问各不同类中具有相同功能的函数。

 

实验八

实验名称:

运算符重载

实验内容:

定义Point类,有坐标_x,_y两个成员变量;对Point类重载“++”“--”运算符,实现对坐标的改变。

源代码:

#include

usingnamespacestd;

classPoint

{

public:

Point()

{

cout<<"Point的默认构造函数被调用"<

}

Point(inti,intj)

{

cout<<"Point的带参数构造函数被调用"<

x=i;

y=j;

}

Point(Point&p)

{

cout<<"Point的默认构造函数被调用"<

x=p.x;

y=p.y;

}

~Point()

{cout<<"Point的析构函数被调用"<

Point&operator++();

Point&operator--();

intx,y;

};

Point&Point:

:

operator++()

{

Pointp;

p.x++;

p.y++;

return*this;

}

Point&Point:

:

operator--()

{

Pointp;

p.x--;

p.y--;

return*this;

}

voidmain(void)

{

Pointp1(2,3);

cout<<"当前的坐标为:

\n"<

cout<<"类自加后的坐标为:

\n"<<++p1.x<<++p1.y<

cout<<"类自减后的坐标为:

\n"<<--p1.x<<--p1.y<

}

运行结果截图:

实验小结:

通过本次实验,我体会到如何实现运算符重载。

通过运算符重载可以给运算符赋予新的含义,从而实现相关功能。

 

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

当前位置:首页 > 工程科技 > 环境科学食品科学

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

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