c++实验报告Word格式.docx
- 文档编号:16634204
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:44
- 大小:366.55KB
c++实验报告Word格式.docx
《c++实验报告Word格式.docx》由会员分享,可在线阅读,更多相关《c++实验报告Word格式.docx(44页珍藏版)》请在冰豆网上搜索。
n-1;
i++)
b[7]+=b[i];
intm=8;
fun(a,m);
a[7]<
用数组作为函数参数,在main()中,输出数组a的元素a[7]的值为b[7]的值。
4.13
inlineintpower_int(intx)
return(x)*(x);
for(inti=1;
=10;
{
intp=power_int(i);
cout<
"
*"
="
p<
函数power-int()是一个内联函数。
三.实验环境PC微机:
Windows
操作系统:
VC程序集成环境。
四、实验心得与体会
通过在MicrosoftVisualC++6.0编程环境中运行简单的示例程序,基本上熟悉了MicrosoftVisualC++6.0的基本使用。
程序的对否可通过MicrosoftVisualC++6.0来检验,调试,修改最终将程序修改正确。
实验二:
构造函数与析构函数
一、实验目的:
1.熟悉类的构造函数与析构函数
2.通过上机掌握构造函数与析构函数具体调用
2.编写两个程序,验证构造函数与析构函数是怎么运行的,看运行结果与自己读的结果有什么不同
5.2
#include<
classTpoint
public:
voidSetPoint(intx,inty);
intXcoord()
{returnX;
intYcoord()
{returnY;
voidMove(intxOffset,intyOffset);
private:
intX,Y;
};
voidTpoint:
:
SetPoint(intx,inty)
X=x;
Y=y;
Move(intxOffset,intyOffset)
X+=xOffset;
Y+=yOffset;
Tpointp1,p2;
p1.SetPoint(3,5);
p2.SetPoint(8,10);
p1.Move(2,1);
p2.Move(1,-2);
x1="
p1.Xcoord()<
y1="
p1.Ycoord()<
x2="
p2.Xcoord()<
y2="
p2.Ycoord()<
该程序主要为了解类,对象,成员函数的基本概念及运行方式。
点类名为TPoint,该类有四个公有成员,它们都为成员函数。
SetPoint()用来给对象的数据成员赋值,Xcoord()用来返回数据成员X值,Ycoord()用来返回数据成员Y值,Move用来改变某个点的坐标值。
该类有两个私有成员,为Int型变量X和Y,用来表示某一点的坐标值。
5.3
classTDatel
TDatel(inty,intm,intd);
~TDatel();
voidPrint();
intyear,month,day;
TDatel:
TDatel(inty,intm,intd)
year=y;
month=m;
day=d;
Constructorcalled.\n"
;
~TDatel()
Destructorcalled.\n"
voidTDatel:
Print()
year<
."
month<
day<
TDateltoday(1998,4,9),tomorrow(1998,4,10);
Cout<
todayis"
today.Print();
tomorrowis"
tomorrow.Print();
程序中定义了两个对象,并对他们进行初始化,初始化由构造函数实现,构造函数又是自动。
调用的,共调用两次,析构函数也是被自动调用的,在输出函数结束前,调用了两次析构函数。
三.实验环境PC微机;
实验三常类型与数据转换
1.熟悉常类型与数据转换
2.通过上机掌握常类型与数据转换
2.编写两个程序,熟悉并掌握常类型与数据转换
例6.11
constintN=6;
voidprint(constint*p,intn);
intarray[N];
N;
cin>
>
array[i];
print(array,N);
voidprint(constint*p,intn)
{"
*p;
n;
"
*(p+i);
}"
}
该程序中,出现了两处const修饰符。
一是定义int型常量N,二是定义了一个指向常量数组元素的指针。
该数组元素不能被更新。
但程序中有一问题,print()函数中,实参array是一个int数组名,形参为constint的指针,类型不同,但没有出现类型错误。
因为形参虽指向一个非constint数组,该数组可更新,但在print()函数中不能更新。
例6.20
classRational
Rational(intd,intn)
den=d;
num=n;
}
operatordouble();
intden,num;
Rational:
operatordouble()
returndouble(den)/double(num);
Rationalr(5,8);
doubled=4.7;
d+=r;
d<
d是一个double数值,r是Rational类的对象。
两个不同类型的数据进行加法之所以进行,得益于类型转换函数operatordouble().编译系统先查看类Rational的说明,看是否存在类型转换函数将Rational类型的操作数转换为double类型的说明。
因为Rational类中说明了类型转换函数operatordouble(),所以在运行时可进行上述类型转换。
实验四派生类的构造函数与虚基类
1.熟悉派生类的构造函数与虚基类
2.通过上机掌握派生类的构造函数与虚基类
2.编写两个程序,熟悉并掌握派生类的构造函数与虚基类
例7.4
classA
public:
A()
a=0;
cout<
A'
sdefalutconstructorcalled.\n"
A(inti)
a=i;
sconstructorcalled.\n"
~A()
{cout<
voidPrint()const
a<
intGeta()
{returna;
private:
inta;
classB:
publicA
{public:
B()
{b=0;
B'
B(inti,intj,intk);
~B()
sdefalutcalled.\n"
voidPrint();
intb;
Aaa;
B:
B(inti,intj,intk):
A(i),aa(j)
b=k;
voidB:
{A:
Print();
b<
aa.Geta()<
{Bbb[2];
bb[0]=B(1,2,5);
bb[1]=B(3,4,7);
for(inti=0;
2;
bb[i].Print();
该程序中,先定义了类A,再定义了类B,它是类A的派生类。
继承方式为公有继承。
派生类B的构造函数格式如下:
B是派生类构造函数名,总参数表中有三个参数:
i用来初始化基类的数据成员,j用来初始化B的子对象aa,k用来初始化B的数据成员b.
执行顺序:
先创建两个对象元素的对象数组。
调用两次类B的默认构造函数,每调用一次类B的默认构造函数时,先调用两次类A的默认构造函数和一次类B的默认构造函数。
接着,程序中出现了两个赋值语句。
系统要建立一个临时对象,调用B类的三个参数的构造函数对它初始化,并赋给左值对象,再调用B类的析构函数将临时对象删除。
输出两个类B对象的数据成员值。
最后,程序结束前系统调用类B的析构函数。
例7.10
A(constchar*s)
{cout<
{}
virtualpublicA
B(constchar*s1,constchar*s2):
A(s1)
s2<
classC:
C(constchar*s1,constchar*s2):
classD:
publicB,publicC
D(constchar*s1,constchar*s2,constchar*s3,constchar*s4)
:
B(s1,s2),C(s1,s3),A(s1)
s4<
D*ptr=newD("
classA"
classB"
classC"
classD"
);
deleteptr;
该程序中,定义了类A,类B,类C和类D。
在派生类B和C中使用了虚基类,使得建立的D类对象只创建一次虚基类子对象。
在派生类B,C,D的构造函数的成员初始化列表中均包含了对虚基类A的构造函数。
在建立类D的对象时,只有类D的构造函数的成员初始化列表中列出的虚基类构造函数被调用,并且仅调用一次,而类D的虚类的构造函数的成员初始化列表中列出的虚基类构造函数不被执行。
实验五运算符重载
1.熟悉运算符重载
2.通过上机掌握运算符重载
2.编写两个程序,熟悉并掌握运算符重载
例8.4
{X=Y=0;
A(inti,intj)
{X=i;
Y=j;
A(A&
p)
{X=p.X;
Y=p.Y;
A&
operator=(A&
p);
intgetX()
intgetY()
intX,Y;
};
A&
A:
operator=(A&
X=p.X;
Y=p.Y;
Assignmentoperatorcalled.\n"
return*this;
Aa(7,8);
Ab;
b=a;
b.getX()<
b.getY()<
该程序中,在类A内定义了一个赋值运算符函数,它被定义为成员函数。
程序中,表达式:
b=a
被编译程序解释为:
b.operator=(a)
调用下列函数:
A:
:
operator=(A&
完成赋值操作。
例8.7
classF
doubleoperator()(doublex,doubley)const;
doubleF:
operator()(doublex,doubley)const
return(x+5)*y;
Ff;
f(1.5,2.2)<
该程序实现f(x,y)=(x+5)y函数的抽象。
Main()函数中出现的表达式:
f(1.5,2.2)
被编译程序解释为:
F.operator()(1.5,2.2)
F是类F的对象。
实验六 动态联编
1.熟悉动态联编
2.通过上机掌握动态联编
2.编写两个程序,熟悉并掌握动态联编
例8.9
classPoint
Point(doublei,doublej)
{x=i,y=j;
virtualdoubleArea()const
{return0.0;
doublex,y;
classRectangle:
publicPoint
Rectangle(doublei,doublej,doublek,doublel);
{returnw*h;
doublew,h;
Rectangle:
Rectangle(doublei,doublej,doublek,doublel)
Point(i,j)
w=k;
h=l;
voidfun(Point&
s)
s.Area()<
Rectanglerec(3.0,5.2,15.0,25.0);
fun(rec);
该程序中类Point中的Area()函数和类Rectangle中的Area()函数为虚函数,在fun()函数的对象引用参数s被动态联编,该函数体内调用的Area()函数是在运行中束定的,它被确定为Rectangle类的Area(0函数,所以结果为375.
例8.14
classA
virtualvoidf()
A:
f()called.\n"
Bb;
A&
r=b;
void(A:
*pf)()=A:
f;
(r.*pf)();
该例说明当使用指向类的成员函数的指针来标识虚函数时在公有继承的条件下,对该虚函数的调用采取动态联编。
实验七扑克牌游戏程序设计
一、实验目的:
设计扑克牌游戏
二、实验要求
创建一副扑克,并完成洗牌、发牌、显示、花色排序、面值排序、删除一张牌、删除一轮牌等操作。
三、实验内容
2.编写程序,掌握并能熟练应用C++基础知识与实践中
string.h>
conio.h>
stdlib.h>
stdio.h>
time.h>
classPlaying_Card/*扑克牌类,表示一张扑克牌的面值、花色和与之相联系的操作*/
intm_Value;
//扑克的实际面值,用整型值表示,从1开始,1~13
charm_Face[3];
/*扑克的数字大小,用字符串的形式表示,为
A,2,3,…,10,J,Q,K*/
charm_Suit;
//扑克的花色(黑、红、梅、方)
Playing_Card();
//构造函数,初始化扑克对象,实际上是将对象清零
voidshowcard();
//显示扑克牌对象的面值,花色
voidCard_Make(int);
//为一张扑克牌对象赋予特定的面值和花色
friendclassPerDeck;
//定义类PerDeck为类Playing_Card的友元类
classDeck//一副扑克(54张)类
Playing_Cardm_cardarray[54];
//一副扑克由54张扑克牌构成
intm_lastdelt;
//标记这副扑克牌删除的张数
Deck();
/*构造函数,初始化一副扑克牌对象,实际上是将其内的
54张扑克牌清零*/
voidMakeDeck();
/*生成一副扑克,即对其内的54张扑克赋予正确
的面值及花色*/
voidShowDeck();
//依次逐张显示这副牌
voidDeckShuff(int);
//洗牌,其参数
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+ 实验 报告