C++期末复习程序分析.docx
- 文档编号:30294681
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:31
- 大小:20.77KB
C++期末复习程序分析.docx
《C++期末复习程序分析.docx》由会员分享,可在线阅读,更多相关《C++期末复习程序分析.docx(31页珍藏版)》请在冰豆网上搜索。
C++期末复习程序分析
C++期末复习(程序分析题)
一、程序改错题
1、指出下面程序段中的错误,并说明出错原因。
classA
{inta,b;
public:
A(intaa,intbb){a=aa;b=bb;}
};
voidmain()
{Ax(2,3),y(4);}
答:
Ax(2,3),y(4);语句出错,因为没有单参数的构造函数(或者y(4)少写了一个参数)。
2、指出并改正下面利用类模板的对象定义中的错误。
template
classTany
{
Tx,y;
public:
Tany(Ta,Tb){x=a,y=b;}
Tsum(){returnx+y;}
};
voidmain()
{Tany(int)obj(10,100);}
答:
Tany(int)obj(10,100);出错,应为Tany
3、指出下面程序段中的错误,并说明出错原因。
classone
{private:
inta;
public:
voidfunc(two&);
};
classtwo
{private:
intb;
friendvoidone:
:
func(two&);
};
voidone:
:
func(two&r)
{
a=r.b;
}
答:
voidfunc(two&);出错,two尚未声明
(应在classone前加声明语句classtwo;)。
4、指出下面程序段中的错误,并说明出错原因。
#include
classA
{public:
voidfun(){cout<<″a.fun″< }; classB {public: voidfun(){cout<<″b.fun″< voidgun(){cout<<″b.gun″< }; classC: publicA,publicB {private: intb; public: voidgun(){cout<<″c.gun″< voidhun(){fun();} }; 答: voidhun(){fun();}出错,C: : fun()有二义性。 5、指出下面程序段中的错误,并说明出错原因。 classLocation {intX,Y=20; protected: intzeroX,zeroY; intSetZero(intZeroX,intZeroY); private: intlength,height; public: floatradius; voidinit(intinitX,intinitY); intGetX(); intGetY(); }; 答: intX,Y=20;出错,不能采用这种方式初始化。 6、下面的程序类B的定义中有一处错误,请用下横线标出错误所在行并说明错误原因。 #include #include classA {public: A(constchar*nm){strcpy(name,nm);} private: charname[80]; }; classB: publicA {public: B(constchar*nm): A(nm){} voidPrintName()const; }; voidB: : PrintName()const {cout<<"name: "< voidmain() {Bb1("wangli"); b1.PrintName();} 7、用下横线标出下面程序main函数中的错误所在行,并说明错误原因。 #include classLocation {private: intX,Y; public: voidinit(intinitX,intinitY); intsumXY(); }; voidLocation: : init(intinitX,intinitY) {X=initX;Y=initY;} intLocation: : sumXY() {returnX+Y;} voidmain() { LocationA1; intx,y; A1.init(5,3); x=A1.X;y=A1.Y; cout< } 8、下面的程序有一处错误,请用下横线标出错误所在行并改正错误。 #include classTest { public: staticintx; }; intx=20;//对类的静态成员初始化错误 voidmain() { cout< : x; } 9、指出下面的程序中的两处错误,并改正 classExam{ public: Exam(inty=10){data=y;} intgetdata()const {return++data;} //错误①常成员函数不能修改对象 //修改方法: 删除关键字const staticintgetcount() {cout< //错误②静态成员函数不能直接访问非静态成员 //修改方法: 删除cout这一行 return++count;} private: intdata; staticintcount; }; 10、指出下面的程序中的错误,并改正 char*string; string=newchar[] free(string); //用new动态分配的内存不能用free函数来释放 //修改方法: 用delete运算符来释放 11、指出下面的程序中的错误 #include #include classPerson {public: Person(char*pN) {cout<<"Constructing"< pName=newchar[strlen(pN)+1]; if(pName! =0)strcpy(pName,pN); ~Person() {cout<<"Destructing"< pName[0]='\0'; deletepName;} protected: char*pName; }; voidmain() {Personp1("Randy"); Personp2=p1;//即Personp2(p1); } //对同一个空间的两次释放,修改方法: 增加一个复制构造函数 Person: : Person(Person&p) {pName=newchar[strlen(p.pName)+1]; strcpy(pName,p.pName); } 五、写出下面程序的执行结果 1、#include classA{ int*a; public: A(intx){a=newint(x);cout<<"*a="<<*a< }; voidmain(){ Ax(3),*p; p=newA(5); deletep; } 输出为: *a=3 *a=5 2、#include template voidf(T&x,Q&y) {if(sizeof(T)>sizeof(Q))x=(T)y; elsey=(Q)x;} voidmain() { doubled; inti; d=9999;i=88; f(d,i); cout<<"d="< d=88;i=9999; f(i,d); cout<<"d="< } 输出为: d=88i=88 d=9999,i=9999 3、#include classbase { public: virtualintfunc(){return0;} }; classderived: publicbase { public: intfunc(){return100;} }; voidmain() { derivedd; base&b=d; cout< cout< : func()< } 输出为: 100 0 4、#include classTest { private: staticintval; inta; public: staticintfunc(); staticvoidsfunc(Test&r); }; intTest: : val=20; intTest: : func() {val+=val;returnval;} voidTest: : sfunc(Test&r) { r.a=25; cout<<"Result3="< } voidmain() {cout<<"Result1="< : func()< Testa; cout<<"Result2="< Test: : sfunc(a); }输出为: Result1=40 Result2=80 Result3=25 5、#include template classTclass {private: Tx,y; public: Tclass(Ta,Tb): x(a){y=b;} Tclass(Ta){y=(T)0,x=a;} voidpr() {charc; c=(y>=(T)0? '+': '-'); cout< y: -y)<<"i"< }; voidmain() { Tclass a.pr(); Tclass b.pr(); } 输出为: 10.5-4.8i 10+0i 6、#include classtest {public: test() {cout<<"调用构造函数"< }; voidf(inti) {statictestx; cout< voidmain() {f(10); f(20); } 输出为: 调用构造函数 10 20 7、#include voidmain() { int*a; int*&p=a; intb=10; p=&b; cout<<*a; } 输出为: 10 8、#include template Tf(T*a,T*b,intn){ Ts=(T)0; for(inti=0;i s+=a[i]*b[i]; returns; } voidmain() { doublec[5]={1.1,2.2,3.3,4.4,5.5},d[5]={10.0,100.0,1000.0}; cout< } 输出为: 3531 9、#include voidmain() { for(inti=0;i<4;i++) cout< '0': ''); } 输出为: 0 0#0 0###0 0#####0 10、运行下面的程序,写出当输入25,60时的输出结果。 #include classgoods { private: staticinttotalWeight; intweight; public: goods(intw) {weight=w; totalWeight+=w;} goods(goods&gd) {weight=gd.weight; totalWeight+=weight;} ~goods() {totalWeight-=weight;} intgetwg() {returnweight;} staticintgetTotal() {returntotalWeight;} }; intgoods: : totalWeight=0; voidmain() {intw; cout<<"Theinitialweightofgoods: "< : getTotal()< cin>>w;//输入25 goodsg1(w); cin>>w;//输入60 goodsg2(w); cout<<"Thetotalweightofgoods: "< : getTotal()< } 输出为: Theinitialweightofgoods: 0 Thetotalweightofgoods: 85 11、#include classA {public: virtualvoidprint(){cout<<"ThisisclassAprinting."< }; classB: publicA {public: voidprint(){} }; classC: publicB {public: voidprint(){cout<<"ThisisclassCprinting."< }; voidshow(A&a) {a.print();} voidmain() {Aa;Bb;Cc; show(a);show(b);show(c); } 输出为: ThisisclassAprinting. ThisisclassCprinting. 12、#include classA {public: A(){a=0;} A(inti){a=i;}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 期末 复习 程序 分析