C++实验5对象成员Word文件下载.docx
《C++实验5对象成员Word文件下载.docx》由会员分享,可在线阅读,更多相关《C++实验5对象成员Word文件下载.docx(17页珍藏版)》请在冰豆网上搜索。
<
cube(a1)<
endl;
cube(a2)<
}
程序分析和运行结果如下
A
-i:
int
+A(x:
int)
+get():
a1.i<
=10;
a2.i<
=20
a1=>
a:
a1.i*a1.i*a1.i=>
1000
a2=>
a2.i*a2.i*a2.i=>
8000
2)分析对象成员的调用,写出程序结果。
#include<
classB
private:
inta,b;
B(){}
B(inti,intj);
voidshowb();
classA
Bc;
A(){}
A(inti,intj);
voidshowa();
A:
:
A(inti,intj):
c(i,j)
{}
voidA:
showa()
c.showb();
B:
B(inti,intj)
a=i;
b=j;
voidB:
showb()
"
a="
a<
"
'
\t'
b="
b<
voidmain()
Aa1(5,6);
a1.showa();
B
-a:
-b:
+B(){}
+B(i:
inti,j:
int)
+showb():
void
-c:
+A()
+A(i:
int,j:
+showa():
调用A的构造函数A(inti,intj)
调用内嵌对象的构造函数B(inti,intj)
执行a1.c.a<
=5,a1.c.b<
=6
通过a1.showa()调用c.showb()执行对a1.c.a<
在屏幕上显示
2.2编写并调试程序:
按下面的要求编程并调试:
编写一类Cpoint表示一个点的信息。
在此基础上编写一个表示三角形的类tria,顶点为其对象成员。
编写完整的程序输出三角形的面积。
分析:
三角形面积S=√[P(P-A)(P-B)(P-C)],其中P=(A+B+C)/2
Cpoint
-x:
float
-y:
+Cpoit(a:
float,b:
float)
+Cpoint(&
p:
Cpoint)
+getx():
+gety():
tria
+tria(a:
Cpoint,b:
Cpoint,c:
+area():
一开始检测就说我的Cpoint类定义的对象出错,所以我可以肯定是我的Cpoint类定义出了问题,所以我就利用“/*”“*/”的效果先把其他代码屏蔽了直接编译链接Cpoint类的问题并逐一解决。
很快,问题就剩下很少了。
如下图:
接着就是tria类的定义方面有些拼写和粗心的错误,认真地检查了一下再次编译链接就只有一个问题剩下了
最后编码无语法错误:
运行结果如下,结果正确:
代码如下:
iostream>
cmath>
usingnamespacestd;
classCpoint{
floatx,y;
Cpoint(floata=0,floatb=0){x=a;
y=b;
Cpoint(Cpoint&
p){x=p.x;
y=p.y;
floatgetx(){returnx;
floatgety(){returny;
classtria{
Cpointa;
Cpointb;
Cpointc;
doubleab,bc,ca;
doublearea;
tria(Cpointp1,Cpointp2,Cpointp3);
doublegetarea();
doubletria:
length(Cpointp1,Cpointp2);
tria:
tria(Cpointp1,Cpointp2,Cpointp3):
a(p1),b(p2),c(p3){}
doubletria:
length(Cpointp1,Cpointp2){
doublex=double(p1.getx()-p2.getx());
doubley=double(p1.gety()-p2.gety());
returnsqrt(x*x+y*y);
getarea(){
ab=length(a,b);
bc=length(b,c);
ca=length(c,a);
doublep=(ab+bc+ca)/2;
area=sqrt(p*(p-ab)*(p-bc)*(p-ca));
returnarea;
voidmain(){
Cpointp1(0,0),p2(0,3),p3(4,0);
triaA(p1,p2,p3);
三角形的面积是"
A.getarea()<
*3课后练习
调试下面的程序,指出程序实现的功能及程序输出结果,进一步理解对象成员、友元、静态成员等概念。
1)调试程序1
B(){};
B(inti,intj);
voidprintb();
inta,b;
A(){};
A(inti,intj);
voidprinta();
Bc;
A(inti,intj):
c(i,j)
{};
printa()
c.printb();
B(inti,intj)
a=i;
b=j;
printb()
cout<
“a=”<
“,b=”<
b<
voidmain()
Am(7,8);
m.printa();
依程序可作一下UML图:
程序调试及运行结果如下:
2)调试程序2
iostream,h>
classqueue
intq[100];
//存放队列中的各个元素
inthead,rear;
//head和rear分别为队头、队尾
queue();
voidqput(inti);
intqget();
queue:
queue()//构造函数
head=rear=0;
“queueinitialized\n”;
voidqueue:
qput(inti)
if(head==100)
“queueisfu11\n”;
return;
head++;
q[head]=i;
intqueue:
qget()
if(rear==head)
“queueisempty\n”;
return0;
rear++;
retutnq[rear];
queuea,b;
a.qput(10);
b.qput(20);
a.qput(19);
a.qget()<
end1;
//操作1
b.qget()<
类UML图如下
对象如右图:
由于蓝色标明那部分的成员函数定义出错,所以出现了一下问题:
所以我在实验基础上在if语句那里加了一个打括号,这时程序才运行正确