C++面向对象试题题型总结.docx
- 文档编号:8907975
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:22
- 大小:23.98KB
C++面向对象试题题型总结.docx
《C++面向对象试题题型总结.docx》由会员分享,可在线阅读,更多相关《C++面向对象试题题型总结.docx(22页珍藏版)》请在冰豆网上搜索。
C++面向对象试题题型总结
C++面向对象程序设计
一、单项选择题(共20题,每题1分,共20分)
1、下列关于C++标识符的命名不合法的是C与C#一样
A.PadB.name_1C.A#bcD._a12
2、若有以下类型标识符定义:
()D
intx=2;charw='a';floaty=23.45f;doublez=45.6712;
则表达式w*x+y-z的结果类型是
A.floatB.charC.intD.double
6、对重载函数形参的描述中,错误的是D重载是重点
A.参数的个数可能不同
B.参数的类型可能不同
C.参数的顺序可能不同
D.参数的个数、类型、顺序都相同,只是函数的返回值类型不同
7、以下能正确定义数组并正确赋初值的语句是D
A.intN=5,b[N][N];
B.inta[2]={{1},{3},{4},{5}};
C.intc[2][]={{1,2},{3,4}};
D.intd[3][2]={{1,2},{3,4}};
8、下列给字符数组进行的初始化中,不正确的是D
A.chars1[]="abcd";
B.chars2[3]={'x','y','\0'};
C.chars3[]={'a','x','y','\0'};
D.chars4[6]={"xyz","mnp"};
9、通常的拷贝构造函数的参数是C
A.某个对象名B.某个对象成员名
C.某个对象的引用D.某个对象的指针名
10、关于构造函数特点的描述中,错误的是A
A.定义构造函数必须指出类型(构造函数特点是无返回类型)
B.构造函数的名字与该类的类名相同
C.一个类中可定义0至多个构造函数(不写构造函数,系统会自动生成一个空的构造函数)
D.构造函数是一种成员函数
11、下面程序的运行结果为C
#include
intadd(inta,intb);
voidmain()
{
externintx,y;
cout< } intx=20,y=5; intadd(inta,intb) { ints=a+b; -1- returns; } A.20B.5C.25D.编译会提示出错信息 12、关于常成员的描述中,错误的是B A.常成员包含常数据成员和常成员函数两种 B.常数据成员必须是公有的 C.常数据成员要使用构造函数成员初始化列表进行初始化 D.常对象只能调用它的常成员函数,不能调用其它的成员函数 13、关于友元函数的描述中,错误的是B A.友元函数不是成员函数 B.友元函数只能访问类中私有成员 C.友元函数破坏隐藏性,尽量少用 D.友元函数说明在类体内,使用关键字friend 14、如果有intx,*p;floaty,*q;则下面操作正确的是C A.p=xB.p=q C.p=&xD.p=&y 16、若数组名作实参而指针变量作形参,函数调用时实参传给形参的是D A.数组的长度 B.数组第一个元素的值 C.数组所有元素的值 D.数组第一个元素的地址 17、对于动态分配内存空间描述正确的是D A.使用new运算符分配的内存空间的长度必需是常量 B.delete运算符可以释放动态的存储空间和静态的存储空间 C.由new分配的内存空间是不连续的 D.delete运算符只能释放由new分配的动态存储空间 18、能够释放对象所占资源的是()A A.析构函数B.数据成员 C.构造函数D.静态成员函数 19、虚函数的定义是在基类中进行的,定义时需要冠以关键字C A.staticB.frend C.virtualD.public 20、在C++中串流类是在头文件strstrea.h中定义的,下列不属于串流类的是)C A.strstreamB.ostrstream C.ofstreamD.istrstream 二、填空题(共9题16空,每空1分,共16分) 1、函数重载时,编译系统会根据__形参的类型__或__形参的个数__来区分。 与返回类型无关 2、若有chara[80];则cin>>a表示从键盘上读入一个__字符串__到数组a中。 3、若希望用一个已有对象来构造另一个同类型的对象,可以使用__拷贝构造函数__来实现。 4、静态成员(static)属于__类__,而不属于__任何一个对象__,它被同一个类的所有对象共享。 5、类的继承方式有____继承、____继承和____继承。 public(或公有)private(或私有)protected(或保护) 6、重载运算符的含义必须清楚,不能有__二义性__。 7、按照联编进行阶段的不同,联编方法可分为两种: __动态联编__和__静态联编__。 8、当基类中的某个成员函数被声明为虚函数后,此虚函数就可以在一个或多个派生类中被重新定义,在派生类中重新定义时,其函数原型,包括返回类型、__函数名__、__参数个数__、参数类型以及参数的顺序都必须与基类中的原型完全相同。 9、C++的I/O是以字节流的形式实现的,每个C++编译系统都带有一个面向对象的输入/输出软件包,这就是I/O流类库。 三、判断题(共10题,每题1分,共10分) 1、C++语言支持封装性和继承性,不支持多态性。 × 2、关系运算符可以用来比较两个字符的大小,也可用来比较两个字符串的大小。 )× 3、字符串"sdfgh"的长度是5。 √占用空间好像是6,字符串有个结尾符号占空间。 4、引用和指针都可作函数参数。 √ 5、友元函数说明在类体内,它是一种成员函数。 ×说明(定义)在类外,声明在类里面 6、友元类必须被说明为公有成员。 × 7、纯虚函数是在基类中说明的虚函数,它在该基类中没有定义具体的操作内容。 √ 8、析构函数不能被继承。 √ 9、运算符重载以后,其优先级和结合性都不能改变。 √ 10、在C++中,函数名实际上是一个指针,它指向函数的入口。 √ 四、分析程序,回答所提出的问题(16分) 1、#include classB; classA { public: A(inti) {a=i;} friendintF(A&f1,B&f2); private: inta; }; classB { public: B(inti) {b=i;} friendintF(A&f1,B&f2); private: intb; }; intF(A&f1,B&f2)\\可以访问类A,类B里的任何成员 { return(f1.a+f2.b)*(f1.a-f2.b); } voidmain() { An1(10);//a=10 第3/7页 Bn2(8);//b=8 cout< } ①写出程序的运行结果。 36 ②该程序中共有几个对象,分别属于哪个类? 为什么在程序的开头处通过语句classB;对类B进行声明? ③程序中的哪两条语句会分别调用A、B的构造函数? 写出这两个构造函数。 ④函数F是什么函数? 它的作用是什么? ①36 ②n1和n2两个对象,n1属于A类,n2属于B类。 因为B类的定义在A类后,而A类中要引用B类。 ③语句An1(10);和语Bn2(8); A类的构造函数: A(inti){a=i;} B类的构造函数: B(inti){b=i;} ④函数F是友元函数。 它的作用是: 提供了不同类或对象的成员函数之间、类的成员函数与一般函数之间共享数据的机制。 (关键答出共享数据、或答出通过友元可以访问到封装与类A、B中的数据) 二、 五、阅读程序,写出运行结果(共2题,第1题6分,第2题8分,共14分) 1、#include intfunc(inta) { intb=0; staticintc=4;\\静态变量 b++;c--; return(a+b+c); } voidmain() { inta=2; for(intj=0;j<2;j++) cout< } 输出结果为: 66 注意66中间有空格 2、#include classX { public: X(inti) {x=i;cout<<”int: ”< X(doublei) {x=(int)i*2;cout<<”double: ”< ~X() {cout<<”~X(): ”< private: intx; }; voidmain() { inta=8; doubleb=11.0; Xx1(55),x2(a*5); Xx3=X(2*a); Xx4=X(b); } 输出结果为: int: 55,called//X1被创建 int: 40,called//x2被创建 int: 16,called//x3被创建 double: 11,called//x4被创建x值为22,显示的是i值,不改变 ~x<>: 22,called//析构函数的调用顺序与构造函数调用顺序相反 ~x<>: 16,called ~x<>: 40,called ~x<>: 50,called 六、编写程序(共2题,第1题10分,第2题14分,共24分) 1、输入一组数据以-1作为结束标志,要求删除其它数据只保留能被2整除的数据并输出结果。 #include voidmain() { intb[50],x,n=0; cin>>x; while(x! =-1) { b[++n]=x; cin>>x; } for(inti=1,j=0;i<=n;i++) if(b[i]%2==0)b[++j]=b[i]; for(i=1;i<=j;i++) cout< cout< } 2、定义一个日期类Date,包含年、月、日三个数据成员,以及一个求第二天日期的成员函数和输出日期的成员函数。 #include classDate { private: intyear,month,day; public: Date(inty,intm,intd) { year=y; month=m; day=d; } voidnextday(); voiddisplay() { cout< } }; voidDate: : nextday() { int totaldays[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,31,31,30,31,30,31}}; day++; intleap=(year%400==0||year%4==0&&year%100! =0); if(day>totaldays[leap][month-1]) { day=1;month++; if(month>12) { month=1;year++; } } } voidmain() { intd,m,y; cout<<"请输入年、月、日: \n"; cin>>y>>m>>d; Dated1(y,m,d); cout<<"今天是: ";d1.display();d1.nextday(); cout<<"明天是: ";d1.display();} 填空题(每空1分,共14分) 观看以下程序: classpoint{ public: voidshow(){cout<<”point”< }; voidmain() { pointp1; point*p; p=&p1; _______________//通过对象p1访问show函数 ______________//通过指针p访问show函数 } 在C++类中可以包含______________、______________和______________三种具有不同访问控制权的成员。 定义类时,在类头中将使用关键字_____________来表示类定义的开始。 如果一个类中至少有一个纯虚函数,则该类称为________________。 C++类的组成包括数据成员和______________,友元_____(是、不是)该类的成员函数。 友员函数是用关键字____________修饰的非成员函数。 若有: inti; int&j=i; i=10; j=i+1; 则i=__________,j=__________。 8、new的功能是____________________,delete的功能是____________________。 选择题(每小题1.5分,共30分) 1、下列特性中不是面向对象程序设计语言所特有的是()。 (A)数据封装(B)继承(C)多态性(D)模板 2、()是给变量取一个别名,它引入了变量的同意词。 (A)指针(B)引用(C)枚举(D)结构 3、类成员的访问权限中,()只能被本类的成员函数和其友元函数访问。 (A)share(B)public(C)private(D)protected 4、关于构造函数,下列说法不正确的是()。 (A)构造函数名字和类名相同 (B)构造函数在创建对象时自动执行 (C)构造函数无任何函数返回类型 (D)构造函数有且只有一个 7、C++语言是从早期的C语言逐渐发展演变而来的.与C语言相比,它在求解问题方法上进行的最大改进是() (A)面向过程 (B)面向对象 (C)安全性 (D)复用性 8、对于类中定义的成员,其隐含访问权限为()。 A.publicB.protected C.privateD.static 9、下面有关重载函数的说法中正确的是() (A)重载函数必须具有不同的返回值类型; (B)重载函数形参个数必须不同; (C)重载函数必须有不同的形参列表 (D)重载函数名可以不同; 10、有如下的对类“CSample”的说明,其中()是错误的。 classCSample{ A.inta=23; B.CSample(); public: C.CSample(intval); D.~CSample(); 11、在inta=3,int*p=&a;中,*p的值是() A.变量a的地址值B.无意义 C.变量p的地址值D.3 12、每个类()构造函数。 (A)只能有一个(B)只可有公有的 (C)可以有多个(D)只可有缺省的 13、在一个类中可以对一个操作符进行()重载。 (A)1种(B)2种以下(C)3种以下(D)多种 14、在公有继承的情况下,基类非私有成员在派生类中的访问权限() (A)受限制(B)保持不变(C)受保护(D)不受保护 15、应在下列程序划线处填入的正确语句是() #include classBase {public: voidfun(){cout<<"Base: : fun"< }; classDerived: publicBase {voidfun() {_____________//显示调用基类的函数fun() cout<<"Derived: : fun"< } }; (A)fun();(B)Base.fun();(C)Base: : fun();(D)Base->fun(); 16、执行下面的程序将输出() #include classBASE{ charc; public: BASE(charn): c(n){} virtual~BASE(){cout< }; classDERIVED: publicBASE{ charc; public: DERIVED(charn): BASE(n+1),c(n){} ~DERIVED(){cout< }; intmain() {DERIVEDa('X'); return0; } (A)XY (B)YX (C)X (D)Y 下面描述中,表达错误的是() (A)公有继承时基类中的public成员在派生类中仍是public的 (B)公有继承是基类中的private成员在派生类中仍是private的 (C)公有继承时基类中的protected成员在派生类中仍是protected的 (D)私有继承时基类中的public成员在派生类中是private的 18、定义析构函数时,应该注意() (A)其名与类名完全相同(B)返回类型是void类型 (C)无形参,也不可重载(D)函数体中必须有delete语句 19、对于在类中定义的静态数据成员,下面正确的说法是() A.该类的每个对象中都有一个静态数据成员 B.对象创建时产生 C.在类外进行初始化 D.既可以在类外初始化,也可以在类内初始化 20、C++中声明常量的关键字是()。 A.constB.externC.publicD.enum 改错题(每处2分,共6分) 使用VC6打开考生文件夹下的工程proj1,此工程包含一个源程序文件main.cpp,但该程序运行有问题,请改正main函数中的错误,使程序的输出结果为: member=0 member=5 menber=10 源程序文件main.cpp清单如下: #include class MyClass { public: MyClass(int i){member=i;} void SetMember(int m){member=m;} int GetMember()const{return menber;} void print()cont{cout<<"member="< private: int member; }; voed main() { MyClass obj1;//更正_____________________________ obj1.print(); MyClass obj2(3); obj1.member=5;//更正__________________________ MyClass.SetMember(10);//更正_______________________ obj1.print(); obj2.print(); } 写出下列程序的执行结果(每小题5分,共20分) #include classSample {intn; public: Sample(inti){n=i;} friendintadd(Sample&s1,Sample&s2); }; intadd(Sample&s1,Sample&s2) { returns1.n+s2.n; } voidmain() { Samples1(10),s2(20); cout< } 执行结果是: #include intadd(intx,inty) { returnx+y+1; } doubleadd(doublex,doubley) { returnx+y-1; } voidmain() { inta=2,b=4; doublec=2.6,d=7.4; cout< } 执行结果是: 3、 #include classA { public: intn; }; classB: virtualpublicA{}; classC: virtualpublicA{}; classD: publicB,publicC { intgetn(){returnB: : n;} }; voidmain() { Dd; d.B: : n=10; d.C: : n=20; cout< : n<<","< : n< } 执行结果是: 4、 #include classmyclass { inta,b; staticints; public: myclass(intx,inty) {a=x;b=y;s++;} voidprint() {cout< }; intmyclass: : s=0; voidmain() { myclassm1(1,2),m2(4,5),m3(6,7); m1.print(); m2.print(); m3.print(); } 执行结果是: 编程题(每题10分、共30分) 测试一个名为rectangle的矩形类,其属性为矩形的左下角与右上角两个点的坐标,能计算矩形的面积。 (10分) 定义一boat与car两个类,二者都有weight属性,定义二者的一个友元函数totalweight(),计算二者的重量和。 (10分) 设计一个汽车类vehicle,包含的数据成员有车轮个数wheels和车重weight。 小车类car是它的派生类,其中包含载人数passenger_load。 每个类都有相关数据的输出方法。 在主程序中定义一个car类对象,对其车轮个数、车重、载人数进行设置并显示。 (10分) 填空题(每空1分,共14分) (1)p1.show();p->show() (2)公有、私有、保护(3)class(4)抽象类 (5)成员函数、不是(6)friend(7)11、11(8)动态申请内存空间、释放由new申请的空间 选择题(每小题1.5分,共30分) 1、D2、B
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 面向 对象 试题 题型 总结