1、c+总复习试题 典型例题解释程序功能并写出运行结果1. #includeclass s int x,y;public: s(int a,int b)x=a;y=b; int getx()return x; int gety()return x+y;void main() int (s:*fp)(); fp=s:getx; s s1(1,2); int v=(s1.*fp)(); fp=s:gety; int t=(s1.*fp)(); coutv=v,t=tendl;(答案:v=2,t=7)2. #includevoid main() int a=10,20,30,40,*pa=a; int
2、* &pb=pa;pb+; cout*paendl;(答案:20)编程序例题3.写一个程序,输入N个学生数据,包括学号、姓名、成绩,要求只输出成绩在60以下分数段的学生数据。(答案:#include#include#define N 3class studint no;char name10;int deg;public:void setdata(int n,char na,int d) no=n;deg=d;strcpy(name,na);void disp()if(deg60) printf(%-5d%-8s%3dn,no,name,deg); ;void main()stud stN;
3、int i,n,d; char na10; for(i=0;iN;i+) printf(输入学号 姓名 成绩:); scanf(%d%s%d,&n,&na,&d);sti.setdata(n,na,d); printf(输出数据n);printf( 学号 姓名 成绩n);for(i=0;iN;i+) sti.disp();4有一个向量类Vector,包括一个点的坐标位置x和y,设计两个友元函数,实现两个向量的加法和减法运算。在主函数中实现向量(10,20)和(30,40)的加减运算。(答案:#includeclass Vectorint x,y;public:Vector() Vector(i
4、nt i,int j)x=i;y=j; void disp() cout(x,y); friend Vector add(Vector v1,Vector v2) Vector v; v.x=v1.x+v2.x; v.y=v1.y+v2.y; return v; friend Vector sub(Vector v1,Vector v2) Vector v; v.x=v1.x-v2.x; v.y=v1.y-v2.y; return v; ; void main() Vector v1(10,20),v2(30,40),v3; v3=add(v1,v2); cout输出结果:endl;cout
5、;v1.disp();cout+;v2.disp(); cout=;v3.disp();coutendl; v3=sub(v1,v2); cout ;v1.disp();cout-;v2.disp(); cout=;v3.disp();cout、的重载。6.对文件的操作。复习题1. 下列语句中错误的是( D)A. int *p=new int(10) ; B. int *p=new int10 ; C. int *p=new int ; D. int *p=new int40(0)2. 假设已经有定义char *const name=”chen” ;下面的语句中正确的是( A)A. name3
6、=q; B. name=”lin”; C. name=new char5 D. name=new char(q);3. 下面的类型声明中正确的是(D )A. int &a4 B. int &*p ; C. int &q ; D. int I,*p=& I ;4. 在声明类时,下面的说法正确的是( C)A.可以在类的声明中给数据成员赋值 B. 数据成员的数据类型可以是register C. private、public、protected可以按任意顺序出现 D. 没有用private、public、protected定义的数据成员是公有成员5. 构造函数是在(B )时被执行的。A.程序编译 B.
7、 创建对象 C. 创建类 D.程序装入内存6. 在下面有关友元函数的描述中,正确的说法是(A )A. 友元函数是独立于当前类的外部函数 B.一个友元函数不能同时定义为两个类的有友元函数 C.友元函数必须在类的外部定义 D.在外部定义友元函数时,必须加关键字friend7. 使用派生类的主要作用是(A )A.提高代码的可重用性 B.提高程序的运行效率 C.加强类的封装性 D.实现数据的隐藏8. 关于虚函数,正确的描述是(A )A.构造函数不能是虚函数 B.析构函数不能是虚函数 C.虚函数可以是友元函数 D.虚函数可以是静态成员函数9. 如果在基类中将成员函数show声明为不带返回值得纯虚函数,正
8、确的写法是(C )A.virtual show( )=0; B.virtual void show( ) C.virtual void show( )=0; D.void show( )=0 virtual;10. 使用myFile.open(“sales.dat”,ios:app)语句打开文件sales.dat后,则(A )A.该文件只能用于输出 B.该文件只能用于输入 C.该文件既能用于输出,又能用于输入 D.若该文件存在,则清除该文件的内容二、分析下列程序中的错误,并说明原因(前2题每题6分,第三题8分,共20分)1#includeiostream.hclass student char
9、 name10; int age; float aver; void printStu( );void main( )student p1,p2,p3;p1.age=16;/2. #includeiostream.hclass stackpublic:stack(int sz);private:char *p;int size;stack:stack(int sz)p=new charsize=sz;void main()stack stt;/.3. #includeiostream.hclass CTestpublic:const int y2;CTest(int i1,int i2):y1
10、(i1),y2(i2) y1=10;x=y1;int readme()const;/.private:int x;const int y1;int CTest:readme()constint i;i=x;x+;return x;void main()CTest c(2,8);int i=c.y2;i=c.y1;三、写出下列程序的运行结果(前2题每题6分,第三题8分,共20分)1#includeiostream.hclass toy public:toy(int q,int p) quan=q; price=p;int get_quan()return quan;int get_price()
11、return price;private:int quan,price;int main()toy op22=toy(10,20),toy(30,48),toy(50,68),toy(70,80);int i;for(i=0;i2;i+) coutopi0.get_quan(),; coutopi0.get_price()n; coutopi1.get_quan(),; coutopi1.get_price()n;coutn;return 0;2#includeiostream.hclass Stockpublic:void print()coutStock class.n;class Der
12、1_Stock:public Stockpublic:void print()coutDeri1_Stock class.n;class Der2_Stock:public Stockpublic:void print()coutprint();ptr=&d1;ptr-print();ptr=&d2;ptr-print();3#includeiostream.hclass Apublic:A(int i):xi(i)A()xi=0;friend A operator+(A a);friend A operator-(A &a);void print();private:int xi;A ope
13、rator+(A a)+a.xi;return a;A operator-(A &a) -a.xi;return a;void A:print() coutxiendl;void main()A i(7);+i;i.print();-i;i.print();二 1答案:p1.age=16; 有错(3分),因为age是私有数据成员,不能直接访问(3分)2. 答案:stack stt; 有错,(3分)类中没有定义无参构造函数(3分) 3. 答案:错误1:y1=10;有错(2分),y1是常成员,不能修改(1分)错误2:x+;有错(2分),readme函数是常成员函数,不能修改对象的数据成员(1分)错
14、误3:i=c.y1;有错(1分),y1是私有变量,不能直接存取(1分)三 1答案:10,20;30,48;50,6870,802答案:Stock class. Stock class. Stock class.3答案:7 6B卷一、选择题(每题2分,共20分,答案填写在题后的表格内)1. 假设已经有定义 const char *const name=”chen” ;下面的语句中正确的是(D )A. name3=a; B. name=”lin”; C. name=new char5 D. coutname3;2. 假设已经有定义const char * name=”chen” ;下面的语句中错误
15、的是( A)A. name3=q; B. name=”lin”; C. name=new char5 D. name=new char(q);3. 在下面有关对构造函数的描述中,正确的是(B )A.构造函数可以带有返回值 B. 构造函数的名字与类名完全相同 C. 构造函数必须带有参数 D. 构造函数必须定义,不能缺省4. 在下面有关析构函数特征的描述中,正确的是(C ) A. 一个类可以定义多个析构函数 B.析构函数名与类名完全相同 C. 析构函数不能指定返回类型 D.析构函数可以有一个或多个参数5. 在下面有关静态成员函数的描述中,正确的是( B)A. 在静态成员函数中可以使用this指针
16、B.在建立对象前,就可以为静态数据成员赋值 C. 静态成员函数在类外定义时,要用static前缀 D. 静态成员函数只能在类外定义6. 友元的作用之一是( A)A. 提高程序的运行效率 B.加强类的封装性 C.实现数据的隐藏性 D.增加成员函数的种类7. 假设已经定义好了一个类student,现在要定义类derived,它是从student私有派生的,定义类derived的正确写法是( C)A.class derived:student private B. class derived:student public C.class derived:private student/ D.clas
17、s derived:public student/ 8. 要实现动态联编,派生类中的虚函数(D )A.返回的类型可以与虚函数的原型不同 B.参数个数可以与虚函数的原型不同 C.参数类型可以与虚函数的原型不同 D.以上都不对9. 有关运算符重载正确的描述是(D )A.C+语言允许在重载运算符时改变运算符的操作个数 B. C+语言允许在重载运算符时改变运算符的优先级C. C+语言允许在重载运算符时改变运算符的结合性 D. C+语言允许在重载运算符时改变运算符的原来的功能10. 假设定义了函数模板:templateT max(T x,T y) return (xy)?x:y; 并定义了int i=6
18、; char c=a; 错误的调用语句是( D)A. max( i,i) B. max(c,c) C.max(int )c,i) D.max(i,c)二、分析下列程序中的错误,并说明原因(前2题每题6分,第三题8分,共20分)1. #includeiostream.hclass pointpublic:int x,y;private:point( )x=1;y=2;void main( )point cpoint;cpoint.x=2;2. #includeiostream.htemplateclass Stackpublic: Stack(int sz) v=p=new Tsize=sz;
19、Stack() delete v; void push(T x) *p+=x; T pop() return *-p; int lenth()const return (p-v);private: T *v,*p; int size;void main()Stack obj(5);obj.push(10);3.#includeiostream.hclass studentint sno;int age;void printStu( );void setSno(int d);void printStu( )cout”nStudent No.is “sno”,”; cout”age is”age”
20、.”endl; void setSno(int d)sno=d;void setAge(int a)age=a;void main( )student lin;lin.setSno(20021);lin.setAge(20);lin.printStu( );三、写出下列程序的运行结果(前2题每题6分,第三题8分,共20分)1#includeiostream.hclass b1public:b1(int ii)i=ii;void display()coutiendl;protected:int i;class b2public:b2(int jj)j=jj;void display() cout
21、jendl;protected:int j;class b3:public b1,public b2public:b3(int ii,int jj,int kk):b1(ii),b2(jj)k=kk;void setall(int ii,int jj,int kk)i=ii;j=jj;k=kk;void display()coutiendl; coutjendl; coutkendl;private:int k;void main()b1 o1(40);o1.display();b2 o2(50);o2.display();b3 o3(10,20,30);o3.display();o3.set
22、all(50,60,70);o3.display();2#includeiostream.hclass Stockpublic:virtual void print()coutStock class.n;class Der1_Stock:public Stockpublic:void print()coutDeri1_Stock class.n;class Der2_Stock:public Stockpublic:void print()coutprint();ptr=&d1;ptr-print();ptr=&d2;ptr-print();3#includeconst int size=10
23、;template /声明一个类模板class stack public: void init() tos=0; void push(Type ch); /参数取Type类型 Type pop(); /返回类型取Type类型private: Type stcksize; /数组的类型为类型参数Type,即可取任意类型 int tos;template void stack:push(Type ob) if (tos=size) coutstack is full; return ; stcktos=ob; tos+; template Type stack :pop() if (tos=0)
24、coutstack is empty; return 0; tos-; return stcktos;int main() /定义字符堆栈 stack s1,s2; /创建两个模板参数为char型的对象 int i; s1.init(); s2.init(); s1.push(a); s2.push(x); s1.push(b); s2.push(y); s1.push(c); s2.push(z); for(i=0;i3;i+) coutpop s1: s1.pop()endl; for(i=0;i3;i+) coutpop s2: s2.pop()endl; return 0;二、分析下列程序中的错误,并说明原因(前2题每题6分,第三题8分,共20分)1答案:point cpoint;是错误的(3分),因为构造函数是私有成员(3分)2. 答案:Stack obj(5); 有错(3分),因为Stack是类模板,应将模板实例化,才可定义对象(3分)3.答案:错误1:printStu、setSno两个成员函数不是公有成员,不允许在类外访问(4分) 错误2:成员函数在类外定义,应加上类名“student:”(2分) 错
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1