《C++试题题库和答案集锦(共13页).doc》由会员分享,可在线阅读,更多相关《C++试题题库和答案集锦(共13页).doc(13页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上判断题1.构造函数、析构函数、友元函数都属于类的成员函数。F2.静态数据成员是类的所有对象共享的数据。T3.可以将派生类对象的值赋给基类对象,也可以将基类对象的值赋给派生类对象。F4.派生类默认的继承方式为public。Fprivatr5.类模板实例化的过程是类模板-模板类-对象。T6.多继承情况下,派生类的构造函数的执行顺序取决于定义派生类时所指定的各基类的顺序。T7.构造函数可以重载,析构函数也可以重载。F8.如果派生类的成员函数的原型与基类中被定义为虚函数的成员函数原型相同,那么,这个函数自动继承基类中虚函数的特性。T9.设A为类,则A类的复制构造函数原型声明为
2、void A(A&)。10.在公有继承中,基类中只有公有成员对派生类是可见的。F11.在公有继承中,基类中的公有成员和私有成员在派生类中都是可见的。T 12.虚基类是用来解决多继承中公共基类在派生类中只产生一个基类子对象的问题。T13.派生类是从基类派生出来,它不能生成新的派生类。F14.当对一个对象调用成员函数时,编译程序先将对象的地址赋值给this指针后,再调用成员函数。T15.对象是属性和行为的集合。T16.模板的使用是为了加强类的封装性。F17.函数定义时在函数参数表后加=0表示该函数为纯虚函数。F18.可以以”类名: 静态成员函数(实参表)”和” 对象.静态成员函数(实参表)”两种形
3、式调用类的静态成员函数。T19.语句int a(5), *p; *p=a; 能够正常执行。F20.设A为类,则A *(*fpA5)()的正确描述是:fpA是一个数组,数组的5个元素都是A类对象。F21.重载双目运算符为成员函数时,一般将左操作数作为函数的参数。F【右边的】22.可以将插入运算符” 重载为类的成员函数。F23.C+语言中,既允许单继承,又允许多继承。T24.派生类的继承方式有两种:公有继承和私有继承。F25.在私有继承中,基类中所有成员对派生类的对象都是不可见的。T26.在保护继承中,对于垂直访问同与公有继承,而对于水平访问同于私有继承。27.派生类是它的基类的组合。T28.构造
4、函数可以被继承。T 29.析构函数不能被继承。T30.子类型是不可逆的。T31.只要是类M继承了类N,就可以类M是类N的子类型。F32.如果A类型是B类型的子类型,则A类型必然适应于B类型。F33.多继承情况下,派生类的构造函数的执行顺序取决于定义派生类时所指定的各基类的顺序。T34.单继承情况下,派生类对基类的成员的访问也会出现二义性。f 35.解决多继承情况下出现的二义性的方法之一就是使用成员名限定法。T单选题1、 派生类的构造函数的成员初始化列中,不能包含( C )。A) 基类的构造函数;B) 派生类中子对象的初始化;C) 基类的子对象的初始化;D) 派生类中一般数据成员的初始化。 2、
5、 面向对象程序设计思想的主要特征不包括( B )E) 继承性F) 功能分解,逐步求精G) 封装性和信息隐藏H) 多态性3、 面向对象程序设计中,( B )为程序的组成单元。 A) 语句B) 类C) 主函数D) 子函数4、 假设已经有定义char * const name=”chen”;下面的语句中正确的是:(B) A) name3=q;B) name=”lin”;C) name= new char5;D) coutb ? a : b;D) extern long index;6、 在C+语言中,函数返回值的类型是由( B )定义的。 A) return 语句中的表达式类型B) 定义该函数时所指
6、定的函数类型C) 调用该函数时的主调用函数类型D) 调用函数时系统临时7、 面向对象程序设计思想的主要特征不包括( B )A) 继承性B) 功能分解,逐步求精C) 封装性和信息隐藏D) 多态性8、 面向对象程序设计中,( B )为程序的组成单元。 A) 语句B) 类C) 主函数D) 子函数9、 在派生类中重新定义虚函数时,除了(D)方面,其他方面都必须与基类中相应的虚函数保持一致。A) 参数个数B) 参数类型C) 函数名称D) 函数体10、 有关运算符重载正确的描述是:( D )。AC+语言允许在重载运算符时改变运算符的操作个数BC+语言允许在重载运算符时改变运算符的优先级CC+语言允许在重载
7、运算符时改变运算符的结合性DC+语言允许在重载运算符时改变运算符的原来的功能11、 若MyClass为一个类,执行“MyClass a3,*p4;”语句时会自动调用该类构造函数的次数是( B )。A4B3C2D712、 7对new运算符的下列描述中,( B )是错误的。A它可以动态创建对象和对象数组B用它创建对象数组时必须指定初始值C用它创建对象时要调用构造函数D用它创建的对象可以使用运算符delete来释放13、 在类外不能访问类私有成员属于类的( A )特征。A封装B继承C多态D抽象14、 namespace与class、struct、union和enum有着明显的区别,下面说法错误的是(
8、 C ) A) namespace只能在全局范围内定义,但它们之间可以互相嵌套B) 在namespace定义的结尾,右花扩号的后面不必跟一个分号C) 一个namespace可以在多个头文件中用一个标识符来定义,就好像重复定义一个类一样D) namespace可以把全局名字空间当成一个小空间来管理15、 在C+语言中,数据封装要解决的问题是( C ) A) 避免数据丢失B) 数据的规范化C) 防止不同模块之间数据的非法访问D) 便于数据转换16、 已知print()函数是一个类的常量成员函数,它无返回值,下列表示中( A)是正确的。 A) void print() constB) const v
9、oid print()C) void const print()D) void print(const)17、 以下正确的函数原型为( D )A) func (int x ; int y);B) void (x , y);C) void (int x , y);D) void func (int , int);18、 为了避免在嵌套的条件语句if-else中产生二义性,C+规定:else子句总是与( B )配对。A) 缩排位置相同的if B) 和其之前最近if C) 和其之后最近if D) 同一行上的if19、 对于一个功能不太复杂,并且要求加快执行速度,选用( A )合适。A) 内联函数 B
10、) 重载函数C) 递归调用 D) 嵌套调用20、 编译时的多态性可以通过使用( A )获得。A) 虚函数和指针 B) 重载函数和析构函数 C) 虚函数和对象 D) 虚函数和引用21、 类O定义了公有函数F1。P和Q为O的派生类,定义为class P:protected O;class Q: public O。则可以访问F1的是( A )。A O、P、Q类的对象B P、Q类的对象C O、Q类的对象D O类的对象22、 A类定义如下,编译时有错误的行是( B )。class A int a; /1行public: A(int);/2行 A();/3行 A(int); /4行;A 1B 2C 3D
11、423、 有如下程序:private:char name80;int main()CD a,*b,d2;return 0;#includeusing namespace std;class CDpublic:CD()coutC;运行时的输出结果是()ACCCBCCCC CCCDC24、 要实现动态联编,必须通过( A )调用虚函数。A对象指针B成员名限定C对象名D派生类名25、 下面对于友元函数描述正确的是 ( C )。A) 友元函数的实现必须在类的内部定义 B) 友元函数是类的成员函数C) 友元函数破坏了类的封装性和隐藏性 D) 友元函数不能访问类的私有成员26、 设有如下定义int (*p
12、tr)();,下面关于ptr正确叙述是( C )。A) ptr是指向一维数组的指针变量。B) ptr是指向int 型数据的指针变量。C) ptr是指向函数的指针,该函数返回一个int型数据。D) ptr是一个函数名,该函数的返回值是指向int型数据的指针。27、 使用重载函数编程序的目的是( A )A) 使用相同的函数名调用功能相似的函数B) 共享程序代码C) 提高程序的运行速度 D) 节省存储空间28、 在派生类中重新定义虚函数时,除了( )方面,其他方面都必须与基类中相应的虚函数保持一致。A) 参数个数 B) 参数类型 C) 函数名称 D) 函数体29、 有如下函数模板定义:templat
13、e T func(T x, T y) return x*x+y*y; 在下列对func的调用中,错误的是(C)。Afunc(5, 11); Bfunc(3.6, 5.8);Cfunc(4, 9.4);Dfunc(b,c);30、 构造函数是在( B )时被执行的A) 程序编译B) 创建对象C) 创建类D) 程序装入内存31、 如果在基类中将show声明为不带返回值的纯虚函数,正确的写法是:( C )A) virtual show()=0;B) virtual void show();C) virtual void show()=0;D) void show()=0 virtual;32、 下列
14、函数模板定义中,不合法的是( C )A) template T1 foo(T1,T1)B) template TT foo(float *);C) inline template T foo(T,unsigned int *);D) Template Ctype foo(Ctype a, Ctype b);33、 对象之间的联系纽带(D)。A方法B多态性C属性D消息34、 15UML中逻辑视图的作用是()。A描述系统的功能需求,找出用例和执行者B描述如何实现系统内部的功能C描述系统代码构件组织和实现模块,及它们之间的依赖关系D描述系统的并发性,并处理这些线程间的通信和同步35、 在下面有关析构
15、函数特征的描述中,正确的是:( C )A) 一个类中可以定义多个析构函数B) 析构函数名与类名完全相同C) 析构函数不能指定返回类型D) 析构函数可以有一个或多个参数36、 使用派生类的主要原因是:( A )A) 提高代码的可重用性B) 提高程序的运行效率C) 加强类的封装性D) 实现数据的隐藏37、 有关运算符重载正确的描述是:( D )A) C+语言允许在重载运算符时改变运算符的操作个数B) C+语言允许在重载运算符时改变运算符的优先级C) C+语言允许在重载运算符时改变运算符的结合性D) C+语言允许在重载运算符时改变运算符的原来的功能38、 对于一个功能不太复杂,并且要求加快执行速度,
16、选用( A )合适。A)内联函数B)重载函数C)递归调用D)嵌套调用39、 5、运行时的多态性可以通过使用( C )获得。A) 虚基类 B) 重载函数C) 虚函数D) 引用基类40、 模板的使用是为了:( A )A) 提高代码的可重用性B) 提高代码的运行效率C) 加强类的封装性D) 实现多态性41、 下列关于this指针的叙述中,错误的是( A)A) 类的成员函数都有this指针B) this隐含于每个类的非静态成员函数中C) this指针是成员函数所属对象的指针D) this指针不能显式定义;42、 模板的使用是为了:( )A) 提高代码的可重用性B) 提高代码的运行效率C) 加强类的封装
17、性D) 实现多态性43、 以下有关静态数据成员函数的叙述不正确的是( )A) 静态成员函数属于整个类B) 对静态成员函数的引用不允许使用对象名C) 在静态成员函数中不能直接引用类的非静态成员D) 使用类名可以直接调用其静态成员函数44、 以下( )成员函数表示纯虚函数。A)virtual int vf(int);B)void vf(int)=0;C)virtual void vf(int)D) virtual void vf()=0;45、 在表达式 x+y*z中,+是作为成员函数重载的运算符,*是作为非成员函数重载的运算符。则operator+有 个参数,operator*有 参数。( C
18、)A) 1、2B)2、1C) 2、2D)1、146、 在下列函数原型中,可以作为类AA构造函数的是( D )。A)void AA(int); B)int AA(); C)AA(int)const; D)AA(int);47、 可以用p.a的形式访问派生类对象p的基类成员a,其中a是( D )A)私有继承的公有成员B)公有继承的私有成员C)公有继承的保护成员D)公有继承的公有成员48下列关于对象概念的描述中,(a)是错误的。 A. 对象就是C语言中的结构变量B. 对象代表着正在创建的系统中的一个实体 C. 对象是一个状态和操作(或方法)的封装体 D. 对象之间的信息传递是通过消息进行的48、 下
19、列有关类的说法不正确的是( C )。A) 对象是类的一个实例B) 任何一个对象只能属于一个具体的类C) 一个类只能有一个对象D) 类与对象的关系和数据类型与变量的关系相似程序设计题1. 编写一个具有复制构造函数及传值构造函数,带字符数组指针的字符串类。(PPT)2. 编写一个程序,设计一个产品类Product,其定义如下: Class Product char *name; /产品名称int price; /产品单价int quantity; /剩余产品数量public: Product(char *n,int p,int q); /构造函数 Product(); /析构函数 void buy
20、(int money); /购买产品 void get() const; /显示剩余产品数量;并用数据进行测试。(10分)3. 以面向对象的方法设计一个类,此类包含3个私有数据:unlead,lead(无铅汽油和有铅汽油)以及total(当天总收入,无铅汽油的价格是17元/公升,有铅汽油的价格是16元/公升),请以构造函数方式建立此值。试输入某天所加的汽油量,本程序将列出加油站当天的总收入。4. 编写一个程序计算两个给定长方形的面积,其中在设计类成员函数addarea()(用于计算两个长方形的总面积)时使用对象作为参数。5. 编一个程序计算正方体,球体和圆柱体的表面积和体积。要求:抽象出一个公
21、共基类container为抽象类,在其中定义求表面积和体积的纯虚函数。抽象类中定义一个公共的数据成员radius,此数值可以作为球体的半径、正方体的边长、圆柱体底面圆半径。由该抽象类派生出的三个类,都有求表面积和体积的实际定义。键盘输入radius的值后,可以输出这3种立方体的面积。6. CFrcation为分数类。使用该类完成分数的加、乘运算。类定义如下:class CFraction int numerator;/分子 int denominator;/分母public: CFraction(int num=0, int deno=1) numerator=num;denominator=
22、deno; CFraction operator+(const CFraction&); friend CFraction operator*(const CFraction&,const CFraction&); void disp();设计如下函数:运算符+重载函数,实现分数相加;运算符*重载函数,实现分数相乘;disp函数,以“numerator/denominator”形式显示CFraction数据成员。7. 设计如下类:CShape抽象类。CShape有2个纯虚函数virtual double area()和 virtual double volume(),没有数据成员。CShape
23、公有派生矩形类CRectangle。CRectangle新增数据成员double width和length。给出了基类虚函数的实现,分别返回矩形面积和体积。并设计CRectangle类的构造和复制构造函数。设计主函数。在主函数中声明基类的指针,指向派生类的对象,调用虚函数显示派生类对象的面积和体积。8. 编写一个程序计算“三角形、正方形、圆形”三种图形的面积,要求:a)抽象出一个基类base;b)在其中说明一个虚函数用来求面积;c)利用派生类定义“三角形、正方形、圆形”;d)编写主函数并测试。9. 编写一个雇员和雇主数据输入和显示的程序。雇员数据有编号(no)、姓名(name)和工资(sala
24、ry),雇主数据有编号(no)、姓名(name)和职位(post)。要求将编号、姓名输入和显示设计成一个类person,并作为雇员数据类employee和雇主数据类employer的基类,并编写主程序进行执行,体现运行多态性,并给出执行结果。10. 编写C+风格的程序,解决百钱问题:将一元人民币兑换成1、2、5分的硬币,有多少种换法?11. 编写一个求字符串“we study new and delete”长度的程序。要求定义类strtype,用new和delete这两个关键字分配和撤销字符串空间:创建字符串空间时,要有打印信息“Creating string”;撤销字符串空间时,要有打印信息
25、“Deleting string”;定义函数show用于显示字符串的长度。显示执行结果。12. 要求计算正方体、球和圆柱3个几何体的表面积和体积。可以抽象出一个公共的基类Base,把它作为抽象类,在该类内定义求表面积和体积德纯虚函数。在抽象类中可以定义一个数据成员length,它可作为球的半径、正方体的边长或圆柱体底面积的半径。请用C+语言定义上述类。读程序写结果a) 程序运行后的输出结果是 #includeusing namespace std;class complex int real; int imag;public:complex(int r=0,int i=0):real(r),i
26、mag(i) void show()coutreal(imag0 ? :+)imagiendl;complex& operator +=(complex &c) real+=c.real; imag+=c.imag; return c;complex& operator -=(complex &c) real-=c.real; imag-=c.imag; return c;friend complex& operator -(complex &);friend complex& operator +(complex &);complex& operator -(complex &c) c.re
27、al-; c.imag-; return c;complex& operator +(complex &c) c.real+; c.imag+; return c;void main() int i=10,j=3,m=2,n=-6; complex test1(i,j); test1.show(); test1-; complex test2(m,n); test2.show(); test2+; test1+=test2; test1.show(); test2-=test1; test2.show();b) 程序运行后的输出结果是 #include #includeusing namesp
28、ace std;class subtest string name; static int objectCount; public:subtest(const string& id = ) : name(id) +objectCount; print(subtest(); subtest() -objectCount; print(subtest();subtest(const subtest& h) : name(h.name) name += copy;+objectCount;print(subtest(const subtest&);void print(const string& m
29、sg = ) const if(msg.size() != 0)cout msg endl;cout t name : objectCount = objectCount endl;int subtest:objectCount = 0;subtest f(subtest x) x.print(x argument inside f();cout Returning from f() endl;return x;int main() subtest h(h);cout Entering f() endl;subtest h2 = f(h);h2.print(h2 after call to f
30、(); /:c) 程序运行后的输出结果是 #include using namespace std;class Apublic:virtual void f()coutA:f() executingn;class B:public Apublic:void f()coutf();p = &b;p-f();d) 写出执行下面程序的输出结果。class A public: A() coutA; ;class B public: B() coutB; ;class C : public A B b; public: C() coutC; ;int main( ) C obj; return 0; 运
31、行程序,屏幕上将显示输出( )。e) 有如下程序#includeusing namespace std;class Apublic:virtual void func1()cout “A1”;void func2()cout “A2”;class B: public Apublic:void func1()cout “B1”;void func2()coutfunc1();p-func2();return 0;运行程序,屏幕上将显示输出_ _。f) 以下程序是定义一个计数器类counter,对其重载运算符“+”,请填空。#include “iostream.h”class counter private: int n; public: counter() n=0; counter(int i)n=i; _ /运算符重载函数(3分) counter t; t.n=n+c.n; return t; void disp() coutn=nendl;void main() counter c1(5),c2(10),c3; c3=c1+c2; c1.disp(); c2.disp(); c3.disp(); 专心-专注-专业
限制150内