期末复习C期末复习题及答案.docx
- 文档编号:10265053
- 上传时间:2023-02-09
- 格式:DOCX
- 页数:19
- 大小:28.28KB
期末复习C期末复习题及答案.docx
《期末复习C期末复习题及答案.docx》由会员分享,可在线阅读,更多相关《期末复习C期末复习题及答案.docx(19页珍藏版)》请在冰豆网上搜索。
期末复习C期末复习题及答案
1.下列语句中错误的是(D)
A.int*p=newint(10); B.int*p=newint[10]; C. int*p=newint; D.int*p=newint[40](0)
2.假设已经有定义char*constname=”chen”;下面的语句中正确的是(A)
A.name[3]=’q’; B.name=”lin”; C.name=newchar[5] D.name=newchar(‘q’);
3.下面的类型声明中正确的是(D)
A.int&a[4] B.int&*p; C.int&&q; D.intI,*p=&I;
4.在声明类时,下面的说法正确的是(C)
A.可以在类的声明中给数据成员赋值 B.数据成员的数据类型可以是register
C.private、public、protected可以按任意顺序出现 D.没有用private、public、protected定义的数据成员是公有成员
5.构造函数是在(B)时被执行的。
A.程序编译 B.创建对象 C.创建类 D.程序装入内存
6.在下面有关友元函数的描述中,正确的说法是(A)
A.友元函数是独立于当前类的外部函数 B.一个友元函数不能同时定义为两个类的有友元函数
C.友元函数必须在类的外部定义 D.在外部定义友元函数时,必须加关键字friend
7.使用派生类的主要作用是(A)
A.提高代码的可重用性 B.提高程序的运行效率 C.加强类的封装性 D.实现数据的隐藏
8.关于虚函数,正确的描述是(A)
A.构造函数不能是虚函数B.析构函数不能是虚函数C.虚函数可以是友元函数D.虚函数可以是静态成员函数
9.如果在基类中将成员函数show声明为不带返回值得纯虚函数,正确的写法是(C)
A.virtualshow()=0; B.virtualvoidshow() C.virtualvoidshow()=0; D.voidshow()=0virtual;
10.使用myFile.open(“sales.dat”,ios:
:
app)语句打开文件sales.dat后,则(A)
A.该文件只能用于输出 B.该文件只能用于输入 C.该文件既能用于输出,又能用于输入 D.若该文件存在,则清除该文件的内容
二、分析下列程序中的错误,并说明原因(前2题每题6分,第三题8分,共20分)
1.#include"iostream.h"
classstudent
{
charname[10];
intage;
floataver;
voidprintStu(){}
};
voidmain()
{
studentp1,p2,p3;
p1.age=16;
//…
}
2.#include"iostream.h"
classstack
{
public:
stack(intsz);
private:
char*p;
intsize;
};
stack:
:
stack(intsz)
{
p=newchar[size=sz];
}
voidmain()
{
stackstt;
//...
}
3.#include"iostream.h"
classCTest
{
public:
constinty2;
CTest(inti1,inti2):
y1(i1),y2(i2)
{
y1=10;
x=y1;
}
intreadme()const;
//...
private:
intx;
constinty1;
};
intCTest:
:
readme()const
{
inti;
i=x;
x++;
returnx;
}
voidmain()
{
CTestc(2,8);
inti=c.y2;
i=c.y1;
}
三、写出下列程序的运行结果(前2题每题6分,第三题8分,共20分)
1.#include"iostream.h"
classtoy
{
public:
toy(intq,intp)
{quan=q;price=p;}
intget_quan()
{returnquan;}
intget_price()
{returnprice;}
private:
intquan,price;
};
intmain()
{
toyop[2][2]={toy(10,20),toy(30,48),toy(50,68),toy(70,80)};
inti;
for(i=0;i<2;i++)
{
cout< cout< cout< cout< } cout<<"\n"; return0; } 2.#include"iostream.h" classStock { public: voidprint() {cout<<"Stockclass.\n";} }; classDer1_Stock: publicStock { public: voidprint() {cout<<"Deri1_Stockclass.\n";} }; classDer2_Stock: publicStock { public: voidprint() {cout<<"Deri2_Stockclass.\n";} }; voidmain() { Stocks1; Stock*ptr; Der1_Stockd1; Der2_Stockd2; ptr=&s1; ptr->print(); ptr=&d1; ptr->print(); ptr=&d2; ptr->print(); } 3.#include"iostream.h" classA { public: A(inti): xi(i){} A(){xi=0;} friendAoperator++(Aa); friendAoperator--(A&a); voidprint(); private: intxi; }; Aoperator++(Aa) { ++a.xi; returna; } Aoperator--(A&a) { --a.xi; returna; } voidA: : print() {cout< voidmain() { Ai(7); ++i; i.print(); --i; i.print(); } 二 1.答案: p1.age=16;有错(3分),因为age是私有数据成员,不能直接访问(3分) 2.答案: stackstt;有错,(3分)类中没有定义无参构造函数(3分) 3.答案: 错误1: y1=10;有错(2分),y1是常成员,不能修改(1分) 错误2: x++;有错(2分),readme函数是常成员函数,不能修改对象的数据成员(1分) 错误3: i=c.y1;有错(1分),y1是私有变量,不能直接存取(1分) 三 1.答案: 10,20;30,48;50,6870,80 2.答案: Stockclass. Stockclass. Stockclass. 3.答案: 7 6 B卷 一、选择题(每题2分,共20分,答案填写在题后的表格内) 1.假设已经有定义constchar*constname=”chen”;下面的语句中正确的是(D) A.name[3]=’a’; B.name=”lin”; C.name=newchar[5] D.cout< 2.假设已经有定义const char*name=”chen”;下面的语句中错误的是(A) A.name[3]=’q’; B.name=”lin”; C.name=newchar[5] D.name=newchar(‘q’); 3.在下面有关对构造函数的描述中,正确的是(B) A.构造函数可以带有返回值 B.构造函数的名字与类名完全相同 C.构造函数必须带有参数 D.构造函数必须定义,不能缺省 4.在下面有关析构函数特征的描述中,正确的是(C) A.一个类可以定义多个析构函数B.析构函数名与类名完全相同C.析构函数不能指定返回类型 D.析构函数可以有一个或多个参数 5.在下面有关静态成员函数的描述中,正确的是(B) A.在静态成员函数中可以使用this指针 B.在建立对象前,就可以为静态数据成员赋值 C.静态成员函数在类外定义时,要用static前缀 D.静态成员函数只能在类外定义 6.友元的作用之一是(A) A.提高程序的运行效率 B.加强类的封装性 C.实现数据的隐藏性 D.增加成员函数的种类 7.假设已经定义好了一个类student,现在要定义类derived,它是从student私有派生的,定义类derived的正确写法是(C) A.classderived: : studentprivate B.classderived: studentpublic C.classderived: privatestudent{//… } D.classderived: : publicstudent{//… } 8.要实现动态联编,派生类中的虚函数(D) A.返回的类型可以与虚函数的原型不同B.参数个数可以与虚函数的原型不同C.参数类型可以与虚函数的原型不同D.以上都不对 9.有关运算符重载正确的描述是(D) A.C++语言允许在重载运算符时改变运算符的操作个数 B.C++语言允许在重载运算符时改变运算符的优先级 C.C++语言允许在重载运算符时改变运算符的结合性 D.C++语言允许在重载运算符时改变运算符的原来的功能 10.假设定义了函数模板: template Tmax(Tx,Ty) {return(x>y)? x: y;} 并定义了inti=6;charc=’a’;错误的调用语句是(D) A.max(i,i) B.max(c,c) C.max((int)c,i) D.max(i,c) 二、分析下列程序中的错误,并说明原因(前2题每题6分,第三题8分,共20分) 1.#include"iostream.h" classpoint {public: intx,y; private: point(){x=1;y=2;}}; voidmain() {pointcpoint; cpoint.x=2;} 2.#include"iostream.h" template classStack {public: Stack(intsz) {v=p=newT[size=sz];} ~Stack() {delete[]v;} voidpush(Tx) {*p++=x;} Tpop() {return*--p;} intlenth()const {return(p-v);} private: T*v,*p; intsize;}; voidmain() {Stack obj(5); obj.push(10);} 3.#include"iostream.h" classstudent {intsno; intage; voidprintStu(); voidsetSno(intd);}; voidprintStu() {cout<<”\nStudentNo.is“< voidsetSno(intd) {sno=d;} voidsetAge(inta) {age=a;} voidmain() {studentlin; lin.setSno(20**1); lin.setAge(20); lin.printStu();} 三、写出下列程序的运行结果(前2题每题6分,第三题8分,共20分) 1.#include"iostream.h" classb1 {public: b1(intii) {i=ii;} voiddisplay() {cout< protected: inti;}; classb2 {public: b2(intjj) {j=jj;} voiddisplay() {cout< protected: intj;}; classb3: publicb1,publicb2 {public: b3(intii,intjj,intkk): b1(ii),b2(jj) {k=kk;} voidsetall(intii,intjj,intkk) {i=ii;j=jj;k=kk;} voiddisplay() {cout< cout< cout< private: intk;}; voidmain() {b1o1(40); o1.display(); b2o2(50); o2.display(); b3o3(10,20,30); o3.display(); o3.setall(50,60,70); o3.display();} 2.#include"iostream.h" classStock {public: virtualvoidprint() {cout<<"Stockclass.\n";}}; classDer1_Stock: publicStock {public: voidprint() {cout<<"Deri1_Stockclass.\n";}}; classDer2_Stock: publicStock {public: voidprint() {cout<<"Deri2_Stockclass.\n";}}; voidmain() {Stocks1; Stock*ptr; Der1_Stockd1; Der2_Stockd2; ptr=&s1; ptr->print(); ptr=&d1; ptr->print(); ptr=&d2; ptr->print();} 3.#include constintsize=10; template classstack {public: voidinit(){tos=0;} voidpush(Typech); //参数取Type类型 Typepop(); //返回类型取Type类型 private: Typestck[size]; //数组的类型为类型参数Type,即可取任意类型 inttos;}; template voidstack : push(Typeob) {if(tos==size){cout<<"stackisfull";return;} stck[tos]=ob;tos++;} template Typestack : pop() {if(tos==0) {cout<<"stackisempty"; return0;} tos--; returnstck[tos];} intmain() { //定义字符堆栈 stack inti; 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;i<3;i++)cout<<"pops1: "< for(i=0;i<3;i++)cout<<"pops2: "< return0;} 二、分析下列程序中的错误,并说明原因(前2题每题6分,第三题8分,共20分) 1.答案: pointcpoint;是错误的(3分),因为构造函数是私有成员(3分) 2.答案: Stack obj(5);有错(3分),因为Stack是类模板,应将模板实例化,才可定义对象(3分) 3.答案: 错误1: printStu、setSno两个成员函数不是公有成员,不允许在类外访问(4分) 错误2: 成员函数在类外定义,应加上类名“student: : ”(2分) 错误3: setAge函数应在类中说明(2分) 三、写出下列程序的运行结果(前2题每题6分,第三题8分,共20分) 1.答案: 40 50 10 20 30 506070 2.答案: Stockclass. Deri1_Stockclass. Deri2_Stockclass. 3.答案: pops1: c pops1: b pops1: a pops2: z pops2: y pops2: x A 卷 一、单项选择题: (每小题2分,共20分) 1、假设已经有定义constchar*name=”chen”;下列语句中错误的是_____________ A.name[3]=’q’ B.name=”lin” C.name=newchar[5] D.name=newchar(‘q’) 2、在下列关键字中,用于说明类中公有成员的是____________ A.public B.private C.protected D.friend 3、下列哪项不是面向对象程序设计的主要特征_______________。 A.封装 B.继承 D.多态 D.结构 4、构造函数是在__________时被执行的。 A.程序编译 B.创建对象 C.创建类 D.程序装入内存 5、在下面有关析构函数的描述中,正确的是____________ A.一个类中可以定义多个析构函数 B.析构函数的名字和类名完全相同 C.析构函数不能指定返回类型 D.析构函数可以有一个或多个参数 6、使用派生类的主要原因是_______________ A.提高代码的可充用性 B.提高程序的运行效率 C.加强类的封装性 D.实现数据的隐藏 7、下列的各函数中,___________不是类的成员函数. A.构造函数 B.析构函数 C.友元函数 D.拷贝构造函数 8、关于虚函数,正确的描述是_______________ A.构造函数不能是虚函数 B.析构函数不能是虚函数 C.虚函数可以是友元函数 D.虚函数可以是静态成员函数 9、友元的作用之一是____________ A.提高程序的运用效率 B.加强类的封装性 C.实现数据的隐藏性 D.增加成员函数的种类 10、在下面有关静态成员函数的描述中,正确的是________________ A.在静态成员函数中可以使用this指针 B.在建立对象前,就可以为静态数据成员赋值 C.静态成员函数在类外定义时,要用static前缀 D.静态成员函数只能在类外定义 得 分 评卷人 二、判断题: (每题1分,共10分) ( )1、使用关键字class定义的类中缺省的访问权限是私有(private)的。 ( )2、构造函数和析构函数都不能重载。 ( )3、说明或定义对象时,类名前不需加关键字class。 ( )4、可以在类的构造函数中对静态数据成员进行初始化。 ( )5、protected和private区别在于protected成员可以被派生类访问,而private成员则不能被派生类访问。 ( )6、在C++中,封装是通过类实现的。 ( )7、无论何时编译器都为类构造一个无参数的缺省的构造函数。 ( )8、无论什么方式的继承,基类的私有成员都不能被派生类访问。 ( )9、在c++中,只有在类对象
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 期末复习C 期末复习题及答案 期末 复习 复习题 答案