};
voidmain()
{A*p=newX(12,3.1425);p->print();}
输出结果如图2所示。
p->print()为什么不能输出X类对象的全部数据成员?
请你给出两种修改程序的方法,可以调用X:
:
print()输出数据12和3.1425。
(1)定义虚函数virtualvoidprint();
(2)用X类指针建立对象X*p=newX(12,3.1425);
(3)做指针强类型转换((X*)p)->print();
4.若有说明:
templatevoidfun(T,T);
inta,doublex;
以下语句
fun(a,a);
fun(x,x);
fun(a,x);
有错误吗?
若出错,请分析原因,并给出解决方案。
重载voidfun(intdouble);
5.以下程序不能正确显示文件中的数据。
请分析原因,并修改相应代码。
#include
voidmain()
{ofstreamfout("d:
DATA.dat",ios:
:
out|ios:
:
binary);
inti,j;
for(i=0;i<20;i++)fout.write((char*)&i,sizeof(int));
fout.close();
//输出文件数据:
ifstreamfin("d:
DATA.dat");
while(fin){fin>>j;cout<fin.close();
}
ifstreamfin("d:
DATA.dat",ios:
:
in|ios:
:
binary);
for(i=0;i<20;i++)
{fin.read((char*)&j,sizeof(int));cout<fin.close();
四.根据程序输出填空。
(每空2分,共24分)
1.程序运行效果如图3。
//成员和友员
#include
classBBank;
classCBank
{intbalance;
public:
CBank(intb=0){balance=b;}
voidgetbalance();
voiddisp(){cout<<"ThesavingsinChinaBankis:
"<(1)total(CBank,BBank);//friendvoid
};
(2)getbalance()//voidCBank:
:
{cout<<"InputthesavingsinChinaBank:
";cin>>balance;}
classBBank
{intbalance;
public:
BBank(intb=0){balance=b;}
voidgetbalance()
{cout<<"InputthesavingsinBusinessBank:
";cin>>balance;}
voiddisp()
{cout<<"ThesavingsinBusinessBankis:
"<(3)voidtotal(CBank,BBank);//friend
};
voidtotal(CBankA,BBankB)
{cout<<"Totalsavingsis:
"<voidmain()
{CBankX(100);BBankY;
X.disp();Y.disp();
(4);//Y.getbalance()
total(X,Y);
}
2.程序运行效果如图4所示。
重载运算符
#include
classCRect
{intlength,width;
public:
CRect(){};
CRect(intl,intw){length=l;width=w;}
voiddisp(){cout<<"Theareais:
"<CRect&(5)(CRectr)//operator=
{length=r.length;width=r.width;
return(6);//*this
}
CRectoperator+(CRectr)
{CRecttemp;(7)
//temp.length=r.length+length;temp.width=r.width+width;
returntemp;
}
};
voidmain()
{CRectr1(3,3),r2(5,8),r3(2,4);
r1.disp();r2.disp();r3.disp();
r1=r2=r2+r3;r1.disp();
}
3.程序运行效果如图5所示。
//虚继承
#include
classBase
{public:
Base(inti){cout<<"Baseconstructorcalled"<
};
classBase1:
(8)Base//virtualpublic
{public:
Base1(inti,intj):
Base(j)
{cout<<"Base1constructorcalled"<
};
classBase2:
(9)//publicBase
{public:
Base2(inti,intj):
Base(j)
{cout<<"Base2constructorcalled"<
};
classDerived:
publicBase2,publicBase1
{public:
Derived(inti,inta,intb,intc)
:
(10)Base1(i,a),Base2(i,b),Base(c)
{cout<<"Derivedconstructorcalled"<
};
intmain()
{DerivedobjD(1,2,3,4);return0;}
4.程序运行效果如图6所示。
//静态数据
#include
classcounter
{(10);//staticintnum
intt;
public:
counter(inta){t=a;}
voidshow()const
{cout<};
(10)=5;//intcounter:
:
num
voidmain()
{countera
(1),b
(2),c(3);
cout<<"a:
";a.show();
cout<<"b:
";b.show();
cout<<"c:
";c.show();
}
5.程序运行效果如图7所示。
//继承
#include
#include
classTwoDShape//二维图形类
{doublewidth,height;
public:
TwoDShape((11)){width=w;height=h;}//doublew=0,doubleh=0
voidshowDim(){cout<<"Widthandheightare"<doublegetWidth(){returnwidth;}
doublegetHeight(){returnheight;}
voidsetWidth(doublew){width=w;}
voidsetHeight(doubleh){height=h;}
};
classTriangle:
publicTwoDShape
{charstyle[20];
public:
Triangle(12){strcpy(style,str);}
//(char*str,doublew=0,doubleh=0):
TwoDShape(w,h)
doublearea(){returngetWidth()*getHeight()/2;}
voidshowStyle(){cout<<"Triangleis"<