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