C++期末复习(程序分析).pdf
《C++期末复习(程序分析).pdf》由会员分享,可在线阅读,更多相关《C++期末复习(程序分析).pdf(21页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C+C+期末复习期末复习(程序分析程序分析)C+C+期末复习(程序分析题)期末复习(程序分析题)一、程序改错题一、程序改错题1 1、指出下面程序段中的错误,并说明出错原因。、指出下面程序段中的错误,并说明出错原因。class Aclass A int a,b;int a,b;publicpublic:A(int aa,int bb)a=aa;b=bb;A(int aa,int bb)a=aa;b=bb;void main()void main()A Ax(2,3),y(4);x(2,3),y(4);答:答:Ax(2,3),y(4);Ax(2,3),y(4);语句出错,因为没有单参数的构造函数语
2、句出错,因为没有单参数的构造函数(或者或者 y(4)y(4)少写了一个参数少写了一个参数)。2 2、指出并改正下面利用类模板的对象定义中的错误。、指出并改正下面利用类模板的对象定义中的错误。template template class Tanyclass Tany T x,y;T x,y;public:public:Tany(T a,T b)x=a,y=b;Tany(T a,T b)x=a,y=b;T sum()return x+y;T sum()return x+y;void main()void main()Tany(int)obj(10,100);Tany(int)obj(10,100
3、);答:答:Tany(int)obj(10,100);Tany(int)obj(10,100);出错,应为出错,应为 Tany obj(10,100);Tany obj(10,100);语句。语句。3 3、指出下面程序段中的错误,并说明出错原因。指出下面程序段中的错误,并说明出错原因。class oneclass one private:private:int a;int a;public:public:void func(two&);void func(two&);class twoclass two private:private:int b;int b;friend void one:f
4、unc(two&);friend void one:func(two&);void one:func(two&r)void one:func(two&r)a=r.b;a=r.b;答:答:void func(two&);void func(two&);出错,出错,twotwo 尚未声明尚未声明(应在应在 class oneclass one 前加声明语句前加声明语句 class twoclass two;)。4 4、指出下面程序段中的错误,并说明出错原因。、指出下面程序段中的错误,并说明出错原因。include include class Aclass A public:public:void
5、fun()coutvoid fun()cout a.funa.fun endl;endl;class Bclass B public:public:void fun()coutvoid fun()cout b.funb.fun endl;endl;void gun()coutvoid gun()cout b.gunb.gun endl;endl;class C:public A,public Bclass C:public A,public B private:private:int b;int b;public:public:void gun()coutvoid gun()cout c.gu
6、nc.gun endl;endl;void hun()void hun()fun();fun();答:答:void hun()fun();void hun()fun();出错,出错,C C:fun()fun()有二义性。有二义性。5 5、指出下面程序段中的错误,并说明出错原因。、指出下面程序段中的错误,并说明出错原因。class Locationclass Location int X,Y=20;int X,Y=20;protected:protected:int zeroX,zeroY;int zeroX,zeroY;int SetZero(int ZeroX,int ZeroY);int
7、SetZero(int ZeroX,int ZeroY);private:private:int length,height;int length,height;public:public:float radius;float radius;void init(int initX,int initY);void init(int initX,int initY);int GetX();int GetX();int GetY();int GetY();答:答:int X,Y=20;int X,Y=20;出错,不能采用这种方式初始化。出错,不能采用这种方式初始化。6 6、下面的程序类、下面的程序类
8、 B B 的定义中有一处错误,请用下横线标出错误所在行并说明错误原因。的定义中有一处错误,请用下横线标出错误所在行并说明错误原因。#include#include#include#includeclass Aclass A public:public:A(const char*nm)strcpy(name,nm);A(const char*nm)strcpy(name,nm);private:private:char name80;char name80;class B:public Aclass B:public A public:public:B(const char*nm):A(nm)B
9、(const char*nm):A(nm)void PrintName()const;void PrintName()const;void B:PrintName()constvoid B:PrintName()const cout name:nameendl;cout name:nameendl;/错误,错误,namename 为私有成员为私有成员void main()void main()B b1(wang li );B b1(wang li );b1.PrintName();b1.PrintName();7 7、用下横线标出下面程序、用下横线标出下面程序 mainmain 函数中的错误所
10、在行,并说明错误原因。函数中的错误所在行,并说明错误原因。#include#includeclass Locationclass Location private:private:int X,Y;int X,Y;public:public:void init(int initX,int initY);void init(int initX,int initY);int sumXY();int sumXY();void Location:init(int initX,int initY)void Location:init(int initX,int initY)X=initX;X=initX;
11、Y=initY;Y=initY;int Location:sumXY()int Location:sumXY()return X+Y;return X+Y;void main()void main()Location A1;Location A1;int x,y;int x,y;A1.init(5,3);A1.init(5,3);x=A1.X;y=A1.Y;x=A1.X;y=A1.Y;coutx+y A1.sumXY()endl;coutx+y A1.sumXY()endl;/错误错误 8 8、下面的程序有一处错误,请用下横线标出错误所在行并改正错误。、下面的程序有一处错误,请用下横线标出错误
12、所在行并改正错误。#include#includeclass Testclass Test public:public:static int x;static int x;int x=20;int x=20;/对类的静态成员初始化错误对类的静态成员初始化错误void main()void main()coutTest:x;coutTest:x;9 9、指出下面的程序中的两处错误,并改正、指出下面的程序中的两处错误,并改正class Examclass Exampublic:public:Exam(int y=10)data=y;Exam(int y=10)data=y;int getdata(
13、)int getdata()constconst return+data;return+data;/错误常成员函数不能修改对象错误常成员函数不能修改对象/修改方法:删除关键字修改方法:删除关键字 constconststatic int getcount()static int getcount()coutdata;coutdata;/错误静态成员函数不能直接访问非静态成员错误静态成员函数不能直接访问非静态成员/修改方法:删除修改方法:删除 coutcout 这一行这一行return+count;return+count;private:private:int data;int data;st
14、aticstaticint count;int count;1010、指出下面的程序中的错误,并改正、指出下面的程序中的错误,并改正char*string;char*string;string=new charstring=new charfree(string);free(string);/用用 newnew 动态分配的内存不能用动态分配的内存不能用 freefree 函数来释放函数来释放/修改方法:用修改方法:用 deletedelete 运算符来释放运算符来释放1111、指出下面的程序中的错误、指出下面的程序中的错误#include#include#include#include cla
15、ss Personclass Person public:public:Person(char*pN)Person(char*pN)cout Constructing pN endl;cout Constructing pN endl;pName=new charstrlen(pN)+1;pName=new charstrlen(pN)+1;if(pName!=0)if(pName!=0)strcpy(pName,pN);strcpy(pName,pN);Person()Person()cout Destructing pName endl;cout Destructing pName end
16、l;pName0=0;pName0=0;delete pName;delete pName;protected:protected:char*pName;char*pName;void main()void main()Person p1(Randy);Person p1(Randy);Person p2=p1;Person p2=p1;/即即 Person p2(p1);Person p2(p1);/对同一个空间的两次释放,修改方法:增加一个复制构造函数对同一个空间的两次释放,修改方法:增加一个复制构造函数Person:Person(Person&p)Person:Person(Person
17、&p)pName=new charstrlen(p.pName)+1;pName=new charstrlen(p.pName)+1;strcpy(pName,p.pName);strcpy(pName,p.pName);五、写出下面程序的执行结果五、写出下面程序的执行结果1 1、#include#include class A class A int*a;int*a;public:public:A(int x)a=new int(x);cout*a=*aendl;delete a;A(int x)a=new int(x);cout*a=*aendl;delete a;void main()v
18、oid main()A x(3),*p;A x(3),*p;p=new A(5);p=new A(5);delete p;delete p;输出为:输出为:*a=3*a=3*a=5*a=52 2、#include#include template template void f(T&x,Q&y)void f(T&x,Q&y)if(sizeof(T)sizeof(Q)x=(T)y;if(sizeof(T)sizeof(Q)x=(T)y;else y=(Q)x;else y=(Q)x;void main()void main()double d;double d;int i;int i;d=999
19、9;i=88;d=9999;i=88;f(d,i);f(d,i);cout d=d i=i endl;cout d=d i=i endl;d=88;i=9999;d=88;i=9999;f(i,d);f(i,d);cout d=d i=i endl;cout d=d i=i endl;输出为:输出为:d=88d=88i=88i=88d=9999,i=9999d=9999,i=99993 3、#include#include class baseclass base public:public:virtual int func()return 0;virtual int func()return
20、 0;class derived:public baseclass derived:public base public:public:int func()return 100;int func()return 100;void main()void main()derived d;derived d;base&b=d;base&b=d;cout b.func()endl;cout b.func()endl;cout b.base:func()endl;cout b.base:func()endl;输出为:输出为:1001000 04 4、#include#include class Test
21、class Test private:private:static int val;static int val;int a;int a;public:public:static int func();static int func();static void sfunc(Test&r);static void sfunc(Test&r);int Test:val=20;int Test:val=20;int Test:func()int Test:func()val+=val;val+=val;return val;return val;void Test:sfunc(Test&r)void
22、 Test:sfunc(Test&r)r.a=25;r.a=25;cout Result3=r.aendl;cout Result3=r.aendl;void main()void main()cout Result1=Test:func()endl;cout Result1=Test:func()endl;Test a;Test a;cout Result2=a.func()endl;cout Result2=a.func()endl;Test:sfunc(a);Test:sfunc(a);输出为:输出为:Result1=40Result1=40Result2=80Result2=80Res
23、ult3=25Result3=255 5、#include#includetemplatetemplateclass Tclassclass Tclass private:private:T x,y;T x,y;public:public:Tclass(T a,T b):x(a)y=b;Tclass(T a,T b):x(a)y=b;Tclass(T a)y=(T)0,x=a;Tclass(T a)y=(T)0,x=a;void pr()void pr()char c;char c;c=(y=(T)0?+:-);c=(y=(T)0?+:-);cout x c(T)0?y:-y)iendl;co
24、ut x c(T)0?y:-y)iendl;void main()void main()Tclass a(10.5,-5.8);Tclass a(10.5,-5.8);a.pr();a.pr();Tclass b(10);Tclass b(10);b.pr();b.pr();输出为:输出为:10.5-4.8i10.5-4.8i10+0i10+0i6 6、#include#includeclass testclass test public:public:test()test()cout cout 调用构造函数调用构造函数endl;endl;void f(int i)void f(int i)s
25、tatic test x;static test x;cout iendl;cout iendl;void main()void main()f(10);f(10);f(20);f(20);输出为:输出为:调用构造函数调用构造函数101020207 7、include include void main()void main()int*a;int*a;int*&p=a;int*&p=a;int b=10;int b=10;p=&b;p=&b;cout*a;cout*a;输出为:输出为:10108 8、include include templatetemplateTf(T*a,T*b,int
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 期末 复习 程序 分析
限制150内