C++自测题之三.doc_第1页
C++自测题之三.doc_第2页
C++自测题之三.doc_第3页
C++自测题之三.doc_第4页
C++自测题之三.doc_第5页
免费预览已结束,剩余10页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一选择题1、面向对象程序设计中的数据隐藏指的是( D )。A. 输入数据必须输入保密口令 B. 数据经过加密处理C. 对象内部数据结构上建有防火墙D. 对象内部数据结构的不可访问性2、下列关于类的访问权限的描述中,错误的是( D ).。A. 说明为公有的成员可以被程序中的任何代码访问B. 说明为私有的成员只能被类的成员和说明为友元类的成员函数访问C. 说明为保护的成员,除了能被本身的成员函数和说明为友元类的成员函数访问外,该类的派生类的成员也可以访问D. 类的所有成员都可以被程序中的任何代码访问3、C 中对于类中定义的成员,其默认的访问权限为( C )。A. PublicB. ProtectedC. PrivatD. Static4、C+ 对C语言作了很多改进,即从面向过程变成为面向对象的主要改进是( D )A. 增加了一些新的运算符 B. 允许函数重载,并允许设置缺省参数C. 规定函数说明符必须用原型D. 引进了类和对象的概念5、已知类A中的一个成员函数的说明如下:void Set(A &a);则该函数的参数“A &a”的含义是( C )。 A. 指向A的指针为aB. 将变量a的地址赋给类A C. 类A对象引用a用作函数的形参D. 变量A与a按位与后作函数参数6、下列特性中,C与C+共有的是( D )。A. 继承B. 封装C. 多态性D. 函数定义不能嵌套7、 关于封装,下列说法中不正确的是( D )。 A. 通过封装,对象的全部属性和操作结合在一起,形成一个整体 B. 通过封装,一个对象的实现细节被尽可能地隐藏起来(不可见) C. 通过封装,每个对象都成为相对独立的实体 D. 通过封装,对象的属性都是不可见的8、 在一个类的定义中,包含有( C )成员的定义。 A. 数据 B. 函数 C. 数据和函数 D. 数据或函数9、 在类作用域中能够通过直接使用该类的( D )成员名进行访问。 A. 私有 B. 公用 C. 保护 D. 任何10、 在关键字public后面定义的成员为类的( B )成员。 A. 私有 B. 公用 C. 保护 D. 任何11、 在关键字private后面定义的成员为类的( A )成员。 A. 私有 B. 公用 C. 保护 D. 任何12、 假定AA为一个类,a为该类公有的数据成员,x为该类的一个对象,则访问x对象中数据成员a的格式为( D )。 A. x(a) B. xa C. x-a D. X.a13、 假定AA为一个类,a()为该类公有的函数成员,x为该类的一个对象,则访问x对象中函数成员a()的格式为( B )。 A. x.a B. x.a() C. x-a D. x-a()14、 假定AA为一个类,a为该类公有的数据成员,px为指向该类对象的一个指针,则访问px所指对象中数据成员a的格式为( C )。 A. px(a) B. pxa C. px-a D. Px.a15、 假定AA为一个类,a为该类私有的数据成员,GetValue()为该类公有函数成员,它返回a的值,x为该类的一个对象,则访问x对象中数据成员a的格式为( D )。 A. x.a B. x.a() C. x-GetValue() D. x.GetValue()16、 假定AA为一个类,int a()为该类的一个成员函数,若该成员函数在类定义体外定义,则函数头为( A )。 A. int AA:a() B. int AA:a() C. AA:a() D. AA:int a()15、 假定AA为一个类,a为该类私有的数据成员,GetValue()为该类公有函数成员,它返回a的值,x为该类的一个对象,则访问x对象中数据成员a的格式为( D )。 A. x.a B. x.a() C. x-GetValue() D. x.GetValue()16、 假定AA为一个类,int a()为该类的一个成员函数,若该成员函数在类定义体外定义,则函数头为( A )。 A. int AA:a() B. int AA:a() C. AA:a() D. AA:int a()17、 假定AA为一个类,a为该类公有的数据成员,若要在该类的一个成员函数中访问它,则书写格式为( A )。 A. a B. AA:a C. a() D. AA:a()18、 在多文件结构的程序中,通常把类的定义单独存放于( D )中。 A. 主文件 B. 实现文件 C. 库文件 D. 头文件19、 假定AA是一个类,abc是该类的一个成员函数,则参数表中隐含的第一个参数为( C )。A. abc B. *this C. this D. this&20、 类中定义的成员默认为( B )访问属性。 A. public B. private C. protected D. Friend21、 结构中定义的成员默认为( A )访问属性。 A. public B. private C. protected D. Friend22、 对于一个类的构造函数,其函数名与类名( A )。 A. 完全相同 B. 基本相同 C. 不相同 D. 无关系23、 对于一个类的析构函数,其函数名与类名( C )。 A. 完全相同 B. 完全不同 C. 只相差一个字符 D. 无关系24、 类的构造函数是在定义该类的一个( C )时被自动调用执行的。 A. 成员函数 B. 数据成员 C. 对象 D. 友元函数25、 类的析构函数是一个对象被( B )时自动调用的。 A. 建立 B. 撤消 C. 赋值 D. 引用26、 一个类的构造函数通常被定义为该类的( A )成员。 A. 公用 B. 保护 C. 私有 D. 友元27、 假定AB为一个类,则执行 “AB x;”语句时将自动调用该类的( B )。 A. 带参构造函数 B. 无参构造函数 C. 拷贝构造函数 D. 赋值重载函数28、 假定一个类的构造函数为 “A(int aa, int bb) a=aa; b=aa*bb;”,则执行 “A x(4,5);”语句后,x.a和x.b的值分别为( C )。 A. 4和5 B. 5和4 C. 4和20 D. 20和529、 假定AB为一个类,则( B )为该类的拷贝构造函数的原型说明。 A. AB(AB x); B. AB(AB& x); C. void AB(AB& x); D. AB(int x);30、 假定一个类的构造函数为 “B(int ax, int bx): a(ax), b(bx) ”,执行 “B x(1,2),y(3,4);x=y;”语句序列后x.a的值为( C )。 A. 1 B. 2 C. 3 D. 431、 假定一个类AB只含有一个整型数据成员a,当用户不定义任何构造函数时,系统为该类定义的无参构造函数为( D )。 A. AB() a=0; B. AB(int aa=0): a(aa) C. AB(int aa): a(aa) D. AB() 32、 对于任一个类,用户所能定义的构造函数的个数至多为( D )。 A. 0 B. 1 C. 2 D. 任意个33、 对于任一个类,用户所能定义的析构函数的个数至多为( B )。 A. 0 B. 1 C. 2 D. 任意个34、 假定一个类对象数组为An,当离开它定义的作用域时,系统自动调用该类析构函数的次数为( C )。 A. 0 B. 1 C. n D. n-135、 假定AB为一个类,则执行“AB a, b(2), c3, *p=&a;”语句时共调用该类无参构造函数的次数为( A )。 A. 5 B. 6 C. 3 D. 436、 对类对象成员的初始化是通过构造函数中给出的( B )实现的。A. 函数体 B. 初始化表 C. 参数表 D. 初始化表或函数体37、 对类中常量成员的初始化是通过构造函数中给出的( C )实现的。 A. 函数体 B. 参数表 C. 初始化表 D. 初始化表或函数体38、 对于下面定义的类MyClass, 在函数f( )中将对象成员n的值修改为50的语句(划线处)应该是( C ) 。class MyClasspublic:MyClass(int x)n=x;void SetValue(int n1)n=n1;private:int n;int f( )MyClass *ptr=new MyClass(45);_; A. MyClass(50)B. SetValue(50)C. ptr - SetValue(50) D.ptr - n=5039、 假定AB为一个类,则执行 “AB *px=new ABn;”语句时将( A )。 A. 动态分配一个数组 B. 动态分配一个对象 C. 静态分配一个数组 D. 静态分配一个对象40、 设px是指向一个类对象的指针变量,则执行 “delete px;”语句时,将自动调用该类的( C )。 A. 无参构造函数 B. 带参构造函数 C. 析构函数 D. 拷贝构造函数41、 通常,拷贝构造函数的参数是( B )。A. 某个对象名 B. 某个对象的引用名C. 某个对象的成员名 D. 某个对象的指针名42、 拷贝(复制)构造函数的作用是( C )。A. 进行数据类型的转换 B. 用对象调用成员函数C. 用对象初始化对象 D. 用一般类型的数据初始化对象43、 一个类的静态数据成员所表示属性 ( C )。A. 是类的或对象的属性 B. 只是对象的属性 C. 只是类的属性 D. 类和友元的属性 44、 静态成员函数对类的数据成员访问( B )。 A. 是不允许的 B. 只允许是静态数据成员 C. 只允许是非静态数据成员 D. 可允许是静态数据成员或非静态数据成员45、 静态数据成员的初始化是在( D )中进行的。 A. 构造函数 B. 任何成员函数 C. 所属类 D. 全局区46、引入友元的主要目的是为了( C )。 A.增强数据安全性B. 提高程序的可靠性 C.提高程序的效率和灵活性 D.保证类的封装性47、 从一个基类派生出的各个类的对象之间( C )。 A. 共享所有数据成员,每个对象还包含基类的所有属性 B. 共享部分数据成员,每个对象还包含基类的所有属性 C. 不共享任何数据成员,但每个对象还包含基类的所有属性 D. 共享部分数据成员和函数成员48、 如果是类B在类A的基础上构造,那么,就称( B )。 A. 类A为基类或父类,类B为超类或子类 B. 类A为基类、父类或超类,类B为派生类或子类 C. 类A为派生类,类B为基类 D. 类A为派生类或子类,类B为基类、父类或超类49、 C+的继承性允许派生类继承基类的( C )。 A. 部分特性,并允许增加新的特性或重定义基类的特性 B. 部分特性,但不允许增加新的特性或重定义基类的特性 C. 所有特性,并允许增加新的特性或重定义基类的特性 D. 所有特性,但不允许增加新的特性或重定义基类的特性50、 派生类的成员函数可以直接访问基类的( B )成员。 A. 所有 B. 公有和保护 C. 保护和私有 D. 私有51、 对于公有继承,基类的公有和保护成员在派生类中将( D )成员。 A. 全部变成公有 B. 全部变成保护 C. 全部变成私有 D. 仍然相应保持为公有和保护52、 在定义一个派生类时,若不使用保留字显式地规定采用何种继承方式,则默认为( A )方式。A. 私有继承 B. 非私有继承 C. 保护继承 D. 公有继承53、若类A和类B的定义如下:class Aint i,j;public:int geti()return i;class B: public Aint k;public:void make()k=i*j;则上述中,( A )是非法的表达式。A. k=i*j B. int k;C. return i; D. void make();54、在下面的表达式中,不表示虚继承的是( C )。 A. virtual publicB.public virtual C.PublicD. Virtual55、设置虚函数的声明中,正确的是( B )。A. 简化程序B.消除二义性C. 提高运行效率 D. 减少目标代码56、 下列虚基类的声明中,正确的是( D )。A. class virtual B: public A B. virtual class B: public AC. class B: public A virtual D. class B: virtual public A57、 下面描述中,正确的是( A )。A. virtual可以用来声明虚函数B. 含有纯虚函数的类是不可以用来创建对象的,因为它是虚基类C. 即使基类的构造函数没有参数,派生类也必须建立构造函数D. 静态数据成员可以通过成员初始化列表来初始化58、如果一个类至少有一个纯虚函数,那么就称该类为( A )。 A.抽象类B. 虚函数C. 派生类D. 以上都不对59、下列运算符中,( A )运算符在C+中不能重载。 A. ?:B. C. newD. &60、 在重载一个运算符时,其参数表中没有任何参数,这表明该运算符是( B )。A. 作为友元函数重载的1元运算符 B. 作为成员函数重载的1元运算符C. 作为友元函数重载的2元运算符 D. 作为成员函数重载的2元运算符61、 在成员函数中进行双目运算符重载时,其参数表中应带有( B )个参数。A. 0 B. 1 C. 2 D. 362、 cout是I0流库预定义的( B ) 。A. 类B. 对象C. 包含文件D. 常量63、 以下关于函数模板叙述正确的是( C )。 A. 函数模板也是一个具体类型的函数 B. 函数模板的类型参数与函数的参数是同一个概念 C. 通过使用不同的类型参数,函数模板可以生成不同类型的函数 D. 用函数模板定义的函数没有类型 二填空题1、以面向对象方法构造的系统,其基本单位是_。 对象2、每个对象都是所属类的一个_。 实例3、对象将其大部分实现细节隐藏起来,这种机制称为_。封装4、类定义中,既包含数据成员,也包含_成员。函数6、类中的数据成员的访问属性通常被指明为_。private(或私有)7、类中的供外部调用定义的函数成员,其访问属性通常被定义为_。public(或公有)8、对于类中定义的任何成员,其隐含访问权限为_。private(或私有)9、对于结构中定义的任何成员,其隐含访问权限为_。public(或公有)10、为了使类中的成员不能被类外的函数通过成员操作符访问,则应把该成员的访问权限定义为_。private11、若在类的定义体中给出了一个成员函数的完整定义,则该函数属于_函数。内联12、若在类的定义体中只给出了一个成员函数的原型,则在类外给出完整定义时,其函数名前必须加上_和两个冒号分隔符。类名13、若在类的定义体中只给出了一个成员函数的原型,则在类外给出完整定义时,其函数名前必须加上类名和两个_分隔符。冒号14、若要把类外定义的成员函数规定为内联函数,则必须把_关键字放到函数原型或函数头的前面。inline15、把一个类的定义体和所有成员函数的定义体所构成的程序范围叫做该类的_。作用域16、假定AA是一个类,“AA*abc();”是该类中一个成员函数的原型,则在类外定义时的函数头为_。AA*AA:abc()17、成员函数的参数表在类作用域中,成员函数的返回值类型_类作用域中。不在18、为了避免在调用成员函数时修改对象中的任何数据成员,则应在定义该成员函数时,在函数头的后面加上_关键字。 const19、 若只需要通过一个成员函数读取数据成员的值,而不需要修改它,则应在函数头的后面加上_关键字。const20 已知一个类的定义如下:#includeclass AA int a10;int n;public:void SetA(int aa, int nn); /用数组aa初始化数据成员a, /用nn初始化数据成员nint MaxA(); /从数组a中前n个元素中查找最大值void SortA(); /采用选择排序的方法对数组a中前n个元素 /进行从小到大排序 void InsertA();/采用插入排序的方法对数组a中前n个元素进行从小到大排序void PrintA(); /依次输出数组a中的前n个元素; 该类中MaxA()函数的实现如下,请在标号位置补充适当的内容。int _(1)_ int x=a0;for(int i=1; ix) _(2)_;_(3)_;21、一个类的_函数实现对该类对象的初始化功能。 构造22、当用户为一个类定义有_时,则系统不会为该类再自动生成一个默认构造函数。 构造函数23、假定用户没有给一个名为AB的类定义构造函数,则系统为其定义的构造函数为 _。 AB()24 、程序填空class A int a; public: A() a=0; _(1)_ /定义构造函数,用参数aa初始化数据成员a ; main() _(2)_; /定义类A的指针对象p _(3)_; /用p指向动态对象并初始化为整数5 解答:(1)A(int aa):a(aa)(2) A *p (3)p=new A(5)25、 假定AB为一个类,则类定义体中的“AB(ABx);”语句为该类_的原型语句。 拷贝构造函数26、 一个类的_函数通常用于实现释放该类对象中指针成员所指向的动态存储空间的任务。 析构27、 定义类动态对象数组时,其元素只能靠自动调用该类的_来进行初始化。无参构造函数28、 在一个类中定义拷贝构造函数的目的,是为了当利用该类的一个对象初始化另一个对象时,_。 能够避免这两个对象的同一指针同时指向同一块29、 #include #include class A int *a; int n; int MaxLen; public: A(): a(0), n(0), MaxLen(0) A(int *aa, int nn, int MM) n=nn; MaxLen=MM; if(nMaxLen) exit(1); _(1)_; /由a指向长度为MaxLen的动态数组 for(int i=0; in; i+) ai=aai; A() delete a; int GetValue(int i) _(2)_ /函数体返回ai的值 ; void main() int b10=1,2,3,4,5,6,7,8,9,10; A r(b,10,10); int i,s=0; for(i=0; i10; i+); _(3)_ /把r对象的a数据成员中的每个 /元素值依次累加到s中 couts=sendl;解答:(1) a=new intMaxLen (2) return ai; (3) s+=r.GetValue(i)30、 在下面一段类定义中, Derived类公有继承了基类Base。需要填充的函数由注释内容给出了功能。class Base private: int mem1,mem2; /基类的数据成员 public: Base(int m1,int m2) mem1=m1; mem2=m2; void output()coutmem1 mem2 ; /.;class Derived: public Base private: int mem3; /派生类本身的数据成员 public: /构造函数,由m1和m2分别初始化mem1和mem2,由m3初始化mem3 Derived(int m1,int m2, int m3); /输出mem1,mem2和mem3数据成员的值 void output() _(1)_; coutmem3endl;/.;Derived:Derived(int m1,int m2, int m3): _(2)_ _(3)_;解答:(1) Base:output() (2) Base(m1,m2) (3) mem3=m331、 已知一维数组类ARRAY的定义如下,ARRAY与普通一维数组区别是:其重载的运算符 要对下标是否越界进行检查。class ARRAY int *v; /指向存放数组数据的空间int s; /数组大小 public: ARRAY(int a, int n); ARRAY()delete v; int size() return s; int& operator(int n); ;_(1)_ operator(int n) / 的运算符成员函数定义if(n0 | _(2)_) cerr=s (3) vn (或*(v+n)32、当保护继承时,基类的_成员在派生类中成为保护成员,派生类对象不能直接访问基类的_成员。公有和保护、任何33、基类和派生类的关系称为_。 继承34、特殊类的对象拥有其一般类的全部属性与操作,称特殊类_了一般类。继承35、如果一个派生类只有一个唯一的基类,则这样的继承关系称为_。单继承36、C+支持两种多态性:_时的多态性和_时的多态性。编译、运行37、在C+中,编译时的多态性是通过_实现的,而运行时的多态性则是通过_实现的。 重载、虚函数38、派生类的成员函数可以直接访问基类的_成员,不能直接访问基类的_成员。公有和保护、私有三程序阅读题以下各题均要求写出程序的运行结果1、#include using namespace std;class MyClasspublic:void DisplayMessage(const char*Text,int Type)coutMessage:Text=Text;coutText=Type+10endl;void DisplayMessage(const char*Text,unsigned int Type)coutMessage:Text=Text;coutText=Typeendl;void main( )unsigned char value=0;MyClass my;my.DisplayMessage(Hello,value);解答:Message:Text=HelloText=102、 #include class CE private: int a,b; int getmax() return (ab? a:b); public: int c; void SetValue(int x1,int x2, int x3) a=x1; b=x2; c=x3; int GetMax(); ;int CE:GetMax() int d=getmax();return (dc? d:c);void main()int x=5,y=12,z=8;CE ex, *ep=&ex;ex.SetValue(x,y,z);coutex.GetMax()SetValue(x+y,y-z,20);coutGetMax()endl;解答:12 20 3 、#includeusing namespace std;class MyClassint a,b;public:MyClass(int x=0,int y=0);MyClass(); ;MyClass:MyClass(int x,int y):a(x),b(y)coutThis is a constructor!a+b=a+bendl;MyClass:MyClass()coutThis is a destructor!endl;void main()MyClass x,y(10,20),z(y);解答: This is a constructor!a+b=0This is a constructor!a+b=30This is a destructor!This is a destructor!This is a destructor!4 、#includeclass A int a,b;public: A() a=b=0; A(int aa, int bb) a=aa; b=bb;int Sum() return a+b;int* Mult() int *p=new int(a*b);return p;void main() int *k;A x(2,3), *p; p=new A(4,5); coutx.Sum() *(x.Mult()endl; coutSum() Mult()endl; delete k;解答: 5 6 9 205、#include class Base int i;public:Base(int n)cout Constucting base class endl;i=n;Base()cout Destructing base class endl;void showi()cout i ,;int Geti()return i; class Derived:public Base int j; Base aa;public:Derived(int n,int m,int p):Base(m),aa(p)cout Constructing derived class endl;j=n;Derived()cout Destructing derived classendl;void show()Base:showi();cout j, aa.Geti() endl;void main() Derived obj(8,13,24);obj.show();解答:派生类的构造函数的执行次序,先调用基类的构造函数,再调用派生类中子对象类的构造函数,最后调用派生类的构造函数。析构函数的执行次序与构造函数正好相反,先调用派生类的析构函数,再调用派生类中子对象类的析构函数,最后调用基类的析构函数。运行结果:Constucting base classConstucting base classConstructing derived class13,8,24Destructing derived classDestructing base classDestructing base class6、#include using namespace std;class B0public:virtual void display()cout

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论