C第8次实验报告汇总Word文件下载.docx
- 文档编号:22365884
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:13
- 大小:114.60KB
C第8次实验报告汇总Word文件下载.docx
《C第8次实验报告汇总Word文件下载.docx》由会员分享,可在线阅读,更多相关《C第8次实验报告汇总Word文件下载.docx(13页珍藏版)》请在冰豆网上搜索。
(1)了解多态性的概念。
(2)了解虚函数的作用及使用方法。
(3)了解静态关联和动态关联的概念和川法。
(4)了解纯虚函数和抽象类的概念和用法。
实验内容:
1、分析程序运行结果,掌握虚函数的使用。
程序一:
#include<
iostream>
usingnamespacestd;
classONE
{public:
virtualvoidf(){cout<
<
"
ONE"
endl;
}
};
classTWO:
publicONE
TWO(){cout<
TWO"
classTHREE:
publicTWO
virtualvoidf(){TWO:
:
f();
cout<
THREE"
;
voidmain()
{ONEaa,*p;
TWObb;
//TWO
THREEcc;
p=&
cc;
p->
//ONETHREE
程序二:
classBase
virtualvoidfn(){cout<
InBaseClass\n"
classSubClass:
publicBase
virtualvoidfn(){cout<
InSubClass\n"
}//覆盖
{Basebc,*p;
SubClasssc;
p=&
bc;
fn();
//InBaseClass
sc;
//InSubClass
2、实现一个类A,在A中有两个私有的整型变量a和b,定义构造函数对a和b进行初始化,并实现成员函数geta()取得a的值和getb()取b的值。
实现类B从A继承,覆盖geta(),使其返回a的2倍。
主函数中声明类B对象,调用类B中的geta()并将结果输出。
3、设计一个计算图形面积的类库。
它的顶层是一个抽象类,并且提供相应的接口函数。
抽象基类Shape,派生出Point类、矩形Rectangle、正方形Square,Point类派生出圆形Circle。
要求:
(1)每个类有构造函数、析构函数,并有相应的输出语句,如:
“正在构造圆形”
(2)能显示每个类的信息,如:
输出“我是圆形”
(3)能计算面积、周长
(4)定义一个基类Shape类型的指针,实现动态多态
(5)动态创建一个圆形对象,赋值给基类Shape类型的指针变量,程序最后delete该指针,保证析构函数的正确调用(提示:
虚析构函数)
(6)在主函数测试。
4、设计一个基类Base,其作用是计算一个图形的面积,它只有一个公有的函数成员虚函数area。
再从Base
类公有派生一个三角形类Triangle
和一个圆类Circle,在类Triangle
和类Circle
中分别定义自己的area
函数,用于计算各自的面积。
在主函数中设计一个Base
类的对象指针,分别指向类Triangle
的对象,调用各自的area
函数显示相应
对象的面积。
分析:
用虚函数实现多态。
5.将上题中的Base
类改为抽象类,应用抽象类,求矩形、圆形的周长和面积。
将Base
类的其成员函数area
和perimeter
声明为纯虚函数,Base
就成为一个抽
象类。
然后再从Base
派生矩形类和圆形类,分别实现Base
中纯虚函数的功能.
结果与分析:
Sy8-1:
Sy8-2:
#include<
classA
{
public:
A(inta,intb):
a(a),b(b){}
virtualintgeta(){returna;
friendclassB;
private:
inta;
intb;
classB:
publicA
public:
B(inta,intb):
A(a,b){}
intgeta(){return2*a;
intmain()
A*p=newB(2,3);
p->
geta()<
system("
pause"
);
return0;
Sy8-3:
constdoublePI=3.1415926;
classShape
Shape(){cout<
ConstructingShape..."
virtual~Shape(){cout<
DestructingShape..."
virtualvoidName(){cout<
Share"
virtualdoubleArea()=0;
virtualdoubleC()=0;
classPoint:
publicShape
Point(){cout<
ConstructingPoint..."
~Point(){cout<
DestructingPoint..."
Point"
doubleArea(){return0;
doubleC(){return0;
classRectangle:
publicShape
Rectangle(intl,intw):
length(l),width(w){cout<
ConstructingRectangle..."
~Rectangle(){cout<
DestructingRectangle..."
doubleArea(){returnlength*width;
doubleC(){return(length+width)*2;
voidName(){cout<
Rectangle"
doublelength;
doublewidth;
classSqure:
Squre(intl):
L(l){cout<
ConstructingSqure..."
~Squre(){cout<
DestructingSqure..."
Squre"
doubleArea(){returnL*L;
doubleC(){return4*L;
doubleL;
classCircle:
publicvirtualPoint
Circle(doubler):
radious(r){cout<
ConstructingCircle..."
~Circle(){cout<
DestructingCircle..."
Circle"
doubleArea(){returnPI*radious*radious;
doubleC(){return2*PI*radious;
doubleradious;
Shape*p;
p=newPoint;
Name();
C:
C()<
Area:
Area()<
deletep;
p=newRectangle(2,3);
p=newSqure(4);
p=newCircle(5);
system("
Sy8-4:
Base(){cout<
ConstructingBase..."
virtual~Base(){cout<
DestructedBase."
classTriangle:
Triangle(doublea,doubleb,doublec):
a(a),b(b),c(c){cout<
ConstructingTriangle..."
~Triangle(){cout<
DestructedTriangle."
doubleArea(){returnsqrt(0.5*(a+b+c)*(0.5*(a+b+c)-a)*(0.5*(a+b+c)-b)*(0.5*(a+b+c)-c));
doublea,b,c;
DestructedCircle."
Base*p;
p=newTriangle(3,4,5);
p=newCircle(4);
return0;
Sy8-5:
virtualdoublePerimeter()=0;
//周长
doublePerimeter(){returna+b+c;
doublePerimeter(){return2*PI*radious;
Perimeter:
Perimeter()<
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第8次实验报告汇总 实验 报告 汇总
![提示](https://static.bdocx.com/images/bang_tan.gif)