classB
{intb;
public:
任课教师:
唐宁九
课程名称:
面向对象的技术与方法
voidsetb(intx){b=x;}
voidshowb(){cout<
}
classC:
publicA,privateB
{intc:
public:
voidsetc(intx,inty,intz){c=z;seta(x);setb(y);}voidshowc(){cout<};
main()
{Cc;
c.seta
(1);
c.showa();
c.setc(1,2,3);
c.showc();
}
以上程序的执行结果是3。
2.#include
classcsample
{private:
inti;
staticintk;
public:
csampie();
voiddisplay();
};
csampie:
:
csample(){i=0;k++;}
voidcsampie:
:
display(){cout<<”i=”<
:
k=0;
main()
{csamplea,b;
a.display();
b.display();
}
i=0,k=2
l=0,k=2_。
以上程序的执行结果是
3.#ineludeclasssample{intX;
public:
voidsetx(inti){x=i;}intputx(){returnx;}};
main()
课程名称:
面向对象的技术与方法
{sample*p;
sampleA[3];
A[0].setx(5);
A[1].setx(6);
A[2].setx(7);
>putx()<<””;}
for(intj=0;j<3;j++){p=&A[j];cout<}
以上程序的执行结果是567
4.#include
staticintdys[]={31,28,31,30,31,30,31,31,30,31,30,31};
classdate
{
intmo,da,yr;
public:
date(intm,intd,inty){mo=m,da=d;yr=y;}
date(){}
voiddisp(){cout<{datedt=*this;
day+=dt.da;
while(day>dys[dt.mo-1])
{day-=days[dt.mo-1];
if(++dt.mo==13){dt.mo=1;dt.yr++;}
}
dt.da=day;
returndt;
}
};
main()
{dated1(2,10,2001),d2;
d2=d1+20;
d2.disp();
}
以上程序的执行结果是3/2/2001。
六、编程题(每小题15分,共30分)
1.用模板设计一个堆栈类,包含判栈、读栈、入栈和出栈功能,要求用成员函数重载“()”实现判栈功能,用友元函数重载“--”实现出栈功能。
重载为出栈?
“<<”?
判栈有判空和判满。
#includeusingnamespacestd;template
classStack
{
private:
intsize;
inttop;
T*space;
public:
Stack(intn);
~Stack()
{
delete[]space;
}voidpush(Tt);
friendostream&operator<<(ostream&out,Stack&st){
while(!
(st.operator()()))
out<returnout;
}
booloperator()()const
{
returntop==size;
}boolIsfull()const
{
returntop==0;
}
};templateStack:
:
Stack(intsize){
this->size=size;
top=size;
space=newT[size];}templatevoidStack:
:
push(Tt){
if(!
lsfull())
课程名称:
面向对象的技术与方法
space[--top]=t;
}intmain()
{
Stackvint>s(20);可以指定栈的大小
s.push
(1);
s.push
(2);
s.push(3);
s.push(4);
s.push(5);
s.push(6);
cout<
}
这个没问题,如果是重载-改为:
#includeusingnamespacestd;templateclassStack
{
private:
intsize;
inttop;
T*space;
public:
Stack(intn);
~Stack()
{
delete[]space;
}voidpush(Tt);
friendStack&operator-(Stack&st)
{
while(!
(st.operator()()))
cout<booloperator()()const
{
returntop==size;
}
boolIsfull()const
{
returntop==0;
}
};
templateStack:
:
Stack(intsize){
this->size=size;
top=size;
space=newT[size];}templatevoidStack:
:
push(Tt){
if(!
lsfull())space[--top]=t;
}intmain()
{
Stacks(20);可以指定栈的大小
s.push
(1);
s.push
(2);
s.push(3);
s.push(4);
s.push(5);
s.push(6);
-S;
}
但是这个在VC下不行,在codeblocks下使用mingw32-g++.exe可以正常编译执行,运行截图:
请参考
、丰4Hy.
2.利用基类、派生类和虚函数的概念编写一个程序计算三角形、矩形和圆形的面积。
#ineludeconstdoublePI=3.1415926;
usingnamespacestd;
stmctPoint
Point()
{
x=y=0;
}
Point(doubleX,doubleY):
x(X),y(Y){};
doublex;
doubley;
};
classshape
public:
virtualdoubleGetArea()=0;//虚函数,纯虚函数,图形不具体的话,无法求面积
virtualvoidPrin1()=0;//虚函数,纯虚函数,图形不具体的话,无法输出面积
};classtrigon:
publicshape
{
public:
trigon(Point&A,Point&B,Point&C):
a(A),b(B),c(C){};
~trigon(){};
doubleGetArea()
{
//自己找公式吧,根据三点计算面积的
area=0;returnarea;
}
voidPrintO
{
cout<<"三角形【("<("
<("
<"<Private:
trigon(){};
Pointa,b,c;//三角形三个点
doublearea;//面积
};
//矩形类,继承自图形类classrect:
publicshape
{
public:
rect(double&Top,double&Bottom,double&Left,double&Right)
:
top(Top),bottom(Bottom),left(Left),right(Right)
{
//填充四个点的坐标pa.x=Left;
pa.y=Top;
pb.x=Left;
pb.y=Bottom;
pc.x=Right;
pc.y=Top;
pd.x=Right;
pd.y=Bottom;
};
~rect(){};
doubleGetAreaO//计算矩形面积
{
//
return(right-left)*(bottom-top);}
voidPrint(){
cout<<"矩形【("<("
<("
<("
<"<private:
rect(){};
Pointpa,pb,pc,pd;//矩形左上、左下、右上、右下四个点坐标
doubletop,bottom,left,right;//矩形上下左右四个线的坐标线
doublearea;//面积
};
//圆形类,继承自图形类classcircle:
publicshape
{
public:
circle(Point&C,double&R)
:
c(C),r(R)
{};
~circle(){};
doubleGetArea(){
//
area=PI*r*r;
returnarea;
}
voidPrint(){
cout<<"圆形【"<"<"<"
<private:
circle(){};
Pointc;//圆心
doubler;//半径
doublearea;//面积
ntmain(intargc,char*argv[])
doubletop,bottom,left,right,radius;top=2;
bottom=1;
left=1;
radius=2;
radius=5;
PointA(left,bottom),B(left,top),C(radius,top),D(radius,bottom);trigonTrigon(A,B,C);
rectRect(top,bottom,left,right);
circleCircle(A,radius);
shape*pS;pS=&Trigon;pS->Print();pS=&Rect;pS->Print();pS=&Circle;pS->Print();
return0;
}