面向对象程序设计复习题选择题.doc_第1页
面向对象程序设计复习题选择题.doc_第2页
面向对象程序设计复习题选择题.doc_第3页
面向对象程序设计复习题选择题.doc_第4页
面向对象程序设计复习题选择题.doc_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

一、选择题(1)C+语言对C语言做了很多改进,C+语言相对于C语言的最根本的变化是A)增加了一些新的运算符B)允许函数重载,并允许设置缺省参数C)规定函数说明符必须用原型D)引进了类和对象的概念(2)对类成员访问权限的控制,是通过设置成员的访问控制属性实现的,下列不是访问控制属性的是 A)公有类型B)私有类型 C)保护类型D)友元类型(3)在类的定义中,用于为对象分配内存空间,对类的数据成员进行初始化并执行其他内部管理操作的函数是A)友元函数B)虚函数C)构造函数D)析构函数(4)类的析构函数的作用是A)一般成员函数的初始化B)类的初始化C)对象的初始化D)删除类创建的对象(5)下列说法正确的是A)内联函数在运行时是将该函数的目标代码插入每个调用该函数的地方B)内联函数在编译时是将该函数的目标代码插入每个调用该函数的地方C)类的内联函数必须在类体内定义D)类的内联函数必须在类体外通过加关键字inline定义(6)下面对静态数据成员的描述中,正确的是 A)静态数据成员可以在类体内进行初始化 B)静态数据成员不可以被类的对象调用 C)静态数据成员不能受private控制符的作用 D)静态数据成员可以直接用类名调用(7)下面对于友元函数描述正确的是 A)友元函数的实现必须在类的内部定义B)友元函数是类的成员函数C)友元函数破坏了类的封装性和隐藏性D)友元函数不能访问类的私有成员(8)在公有派生情况下,有关派生类对象和基类对象的关系,下列叙述不正确的是A)派生类的对象可以赋给基类的对象B)派生类的对象可以初始化基类的引用C)派生类的对象可以直接访问基类中的成员D)派生类的对象的地址可以赋给指向基类的指针(9)下面程序的运行结果为#includeclass Apublic: A()cout1; A()cout2;class B:public Apublic: B()cout3; B()cout4;void main() B b;A)1234B)1324 C)1342D)3142(10)下列关于虚基类的描述,错误的是A)设置虚基类的目的是为了消除二义性B)虚基类的构造函数在非虚基类之后调用C)若同一层中包含多个虚基类,这些虚基类的构造函数按它们说明的次序调用D)若虚基类由非虚基类派生而来,则仍然先调用基类构造函数,再调用派生类的构造函数(11)下列关于多态性的描述,错误的是A)C+语言中的多态性分为编译时的多态性和运行时的多态性B)编译时的多态性可通过函数重载实现C)运行时的多态性可通过模板和虚函数实现D)实现运行时多态性的机制称为动态绑定(12)当使用ifstream流类定义一个流对象并打开一个磁盘文件时,文件的隐含打开方式为A)ios:inB)ios:out C)ios:in | ios:outD)以上都不对(13)下列程序的运行结果是 #includeclass Aint a;public:A()a=0; A(int aa) a=aa; couta+; ;void main() A x,y (2),z (3); coutendl;A)00B)23C)34D)25(14)对虚函数的调用( )A)一定使用动态联编 B)必须使用动态联编 C)一定使用静态联编 D)不一定使用动态联编(15)下面程序错误的语句是 #include void main() int *p=new int1; p=9; cout *pendl; delete p; A)B)C)D)(16)在C+语言中,数据封装要解决的问题是A)数据的规范化 B)便于数据转换 C)避免数据丢失 D)防止不同模块之间数据的非法访问(17)对类的构造函数和析构函数描述正确的是A)构造函数可以重载,析构函数不能重载 B)构造函数不能重载,析构函数可以重载 C)构造函数可以重载,析构函数也可以重载 D)构造函数不能重载,析构函数也不能重载(18)下面程序的运行结果为#includeclass A int num;public: A(int i)num=i; A(A &a)num=a.num+; void print()coutnum;void main() A a (1),b(a); a.print(); b.print();A)11B)12C)21D)22(19)下面对静态数据成员的描述中,正确的是 A)静态数据成员是类的所有对象共享的数据B)类的每个对象都有自己的静态数据成员C)类的不同对象有不同的静态数据成员值D)静态数据成员不能通过类的对象调用(20)如果类A被说明成类B的友元,则A)类A的成员即类B的成员B)类B的成员即类A的成员C)类A的成员函数不得访问类B的成员D)类B不一定是类A的友元(21)可以在类外用p.a的形式访问派生类对象p的基类成员a,其中a是A)私有继承的公有成员B)公有继承的私有成员C)公有继承的保护成员D)公有继承的公有成员 (22)建立派生类对象时,3种构造函数分别是a(基类的构造函数)、b(成员对象的构造函数)、c(派生类的构造函数)这3种构造函数的调用顺序为A)abcB)acbC)cabD)cba(23)下面关于虚函数的描述,错误的是A)在成员函数声明的前面加上virtual修饰,就可把该函数声明为虚函数B)基类中说明了虚函数后,派生类中对应的函数也必须说明为虚函数C)虚函数可以是另一个类的友元函数,但不能是静态成员函数D)基类中说明的纯虚函数在其任何派生类中都必须实现 (24)下面关于模板的描述,错误的是A)函数模板和类模板的参数可以是任意的数据类型B)类模板不能直接使用,必须先实例化为相应的模板类,然后定义了模板类的对象后才能使用C)函数模板不能直接使用,需要实例化为模板函数后才能使用D)类模板的成员函数都是模板函数(25)语句ofstream f(SALARY.DAT,ios:appios:binary);的功能是建立流对象f,试图打开文件SALARY.DAT并与之连接,并且A)若文件存在,将文件写指针定位于文件尾;若文件不存在,建立一个新文件B)若文件存在,将其置为空文件;若文件不存在,打开失败C)若文件存在,将文件写指针定位于文件首;若文件不存在,建立一个新文件D)若文件存在,打开失败;若文件不存在,建立一个新文件(26)下面程序的运行结果是 #include void main() int num=1; int &ref=num; ref=ref+2; cout num; num=num+3; cout refendl; A)13B)16C)36D)33(27)下列程序的运行结果为#includeint i=0;class Apublic: A()i+;void main() A a,b3,*c; c=b; coutiendl;A)2B)3C)4D)5(28)下面关于C+语言的描述错误的是A)C+语言支持数据封装B)C+语言中引入友元没有破坏封装性C)C+语言允许函数名和运算符重载D)C+语言支持动态联编(29)一个函数功能不太复杂但要求被频繁调用,应选用A)内联函数B)重载函数C)递归函数D)嵌套函数(30)为了使类中的某个成员不能被类的对象通过成员操作符访问,则不能把该成员的访问权限定义为 A)publicB)protectedC)privateD)static(31)在C+语言程序中,对象之间的相互通信通过A)继承实现B)调用成员函数实现C)封装实现D)函数重载实现(32)类的析构函数是在什么时候调用的?A)类创建时B)创建对象时 C)删除对象时D)不自动调用(33)通常拷贝构造函数的参数是A)某个对象名B)某个对象的成员名C)某个对象的引用名D)某个对象的指针名(34)下面程序的运行结果为#includeclass A static int n;public: A()n=1; A(int num)n=num; void print()coutn;int A:n=2;void main() A a,b (3); a.print(); b.print();A)11B)13C)23D)33(35)下列不是描述类的成员函数的是A)构造函数B)析构函数C)友元函数D)拷贝构造函数(36)继承机制的作用是A)信息隐藏B)数据封装C)定义新类D)数据抽象(37)C+语言类体系中,不能被派生类继承的有A)转换函数B)构造函数C)虚函数D)静态成员函数(38)下面程序的运行结果是#includeclass baseprotected: int a;public: base()cout0;class base1:virtual basepublic: base1()cout1;class base2:virtual basepublic: base2()cout2;class derived:public base1,public base2public: derived()cout3;int main() derived obj;return 0;A)0123B)3120C)0312D)3012(39)对于类定义 class A public: virtual void func1() void func2() ; class B:public A public: void func1()coutclass B func 1end1; virtual void func2()coutclass B func 2end1; ;下面正确的叙述是A) A:func2()和B:func1()都是虚函数B) A:func2()和B:func1()都不是虚函数C) B:func1()是虚函数,而A:func2()不是虚函数D) B:func1()不是虚函数,而A:func2()是虚函数(40)下面关于运算符重载的描述错误的是A)运算符重载不能改变操作数的个数、运算符的优先级、运算符的结合性和运算符的语法结构B)不是所有的运算符都可以进行重载C)运算符函数的调用必须使用关键字operatorD)在C+语言中不可通过运算符重载创造出新的运算符(41)下列程序的运行结果为#includetemplateclass FF TT a1, a2, a3; public: FF(TT b1, TT b2, TT b3)a1=b1; a2=b2; a3=b3; TT Sum()return a1+a2+a3;void main() FF x(int(1.1),2,3),y(int(4.2),5,6); coutx.Sum() y.Sum()endl;A)6.1 15.2B)6 15C)6 15.2D)6.1 15(42)下面关于C+语言的描述错误的是A)C+语言支持数据封装B)C+语言中引入友元没有破坏封装性C)C+语言允许函数名和运算符重载D)C+语言支持动态联编(43)下面程序的运行结果为#include void swap(int &a,int b) int temp; temp=a+; a=b; b=temp;void main() int a=2,b=3; swap(a,b); couta,bendl;A)2,3B)3,2C)2,2D)3,3(44)下列关于C+语言类的描述中错误的是A)类用于描述事物的属性和对事物的操作B)类与类之间通过封装而具有明确的独立性C)类与类之间必须是平等的关系,而不能组成层次结构D)类与类之间可以通过一些方法进行通信和联络(45)下列关于构造函数说法不正确的是A)构造函数必须与类同名B)构造函数可以省略不写C)构造函数必须有返回值D)在构造函数中可以对类中的成员进行初始化(46)如果友元函数重载一个运算符时,其参数表中没有任何参数则说明该运算符是A)一元运算符B)二元运算符C)选项A)和选项B)都可能D)重载错误(47)在重载一个运算符时,如果其参数表中有一个参数,则说明该运算符是A)一元成员运算符B)二元成员运算符C)一元友元运算符D)选项B)和选项C)都可能(48)设置虚基类的目的是( )A)简化程序 B)消除二义性 C)提高运行效率 D)减少目标代码(49)表示在输出时显示小数位,和在文件输入时判断文件尾的函数分别是A)showbase()和eof()B)showpoint()和eof()C)showpoint()和bad()D)showpoint()和good()(50)下列程序中画线处应填入的语句是class Base public:void fun()coutBase of funendl;class Derived:public Base void fun() _ /调用基类的成员函数funcoutDerived of funfun();(51)一个类的友元函数能够访问该类的A)私有成员B)保护成员C)公有成员D)所有成员(52)关于静态数据成员的描述中正确的是A)类的静态数据成员不是类的所有对象共享的数据B)类的静态数据成员不能被类的成员函数调用C)类的静态数据成员不能被类的构造函数调用D)类的静态数据成员必须进行初始化(53)下表正确的是在父类中的访问属性访问修饰符在子类中的访问属性A)publicprivate不能直接访问B)protectpublicpublicC)privatepublic不能直接访问D)protectprivateprotect(54)下面这个程序的结果是#includeclass Aprivate:int a;public:void seta(); int geta();void A:seta() a = 1;int A:geta() return a;class B private: int a;public:void seta(); int geta();void B:seta()a = 2;int B:geta()return a;class C : public A, public B private:int b;public:void display();void C:display() int b = geta();cout b;void main() C c;c.seta();c.display();A)1B)2C)随机输出1或2D)程序有错(56)下面叙述不正确的是A)基类的保护成员在派生类中仍然是保护的成员B)基类的保护成员在公有派生类中仍然是保护的C)基类的保护成员在私有派生类中仍然是私有的D)对基类成员的访问必须是无二义性(57)类A是类B的友元,类B是类C的友元,则下列说法正确的是A)类B是类A的友元B)类C是类A的友元C)类A是类C的友元D)以上都不对(58)若有如下类定义: classs B void fun() protected; double varl; public: void fun2() ; class D:public B protected; void fun3() ;已知obj是类D的对象,下列语句中不违反成员访问控制的权限的是 A obj.fun1(); B obj.var1; C obj.fun2(); D obj.fun3();(59)有如下程序: #include class base public; void output()cout1; virtual void print() cout B; ; class derived:public base public: void output()cout2; void print()coutoutput(); ptr-print(); delete ptr; return 0; 程序的输出结果是 A 1B B 1D C 2B D 2D(60)下列是重载乘法运算的函数原型声明,其中错误的是A myclass operator*(double,double);B myclass operator*(double,myclass);C myclass operator*(myclass,double);D myclass operator*( myclass , myclass);(61) 有如下程序: #include using namespace std; class B public: virtual void show()cout B; ; class D:public B public: void show()coutshow(); void fun2(B &ref)ref.show(); void fun3(B b)b.show(); int main() B b,*p=new D; D d; fun1(p); fun2(b); fun3(d); return 0 ; 程序的输出结果是 A) DBD B) BBD C) DBB D) DBD(62)下列关于类定义的说法中,正确的是A)类定义中包括数据成员和函数成员的声明B)类成员的缺省访问权限是保护的C) 数据成员必须被声明为私有的D)成员函数只能在类体外进行定义(63)下列关于派生类构造函数和析构函数的说法中,错误的是A)派生类的构造函数会隐含调用基类的构造函数B)如果基类中没有缺省构造函数,那么派生类必须定义构造函数C)在建立派生类对象时,先调用基类的构造函数,再调用派生类的构造函数D)在销毁派生类对象时,先调用基类的析构函数,再调用派生类的析构函数(64)一个类如果没有定义任何函数,编译器不会自动为这个类产生_ 。A. 拷贝构造函数B. 无参构造函数C. 输出流运算符D. 赋值运算符(65)有如下函数模板: template T souare(T x) (retumx * x ;)基中T是 A)函数形参 B)函数实参 C)模板形参 D)模板实参 (66)使用输入输出操作符setw,可以控制 A)输出精度 B)输出宽度 C)对齐方式 D)填充字符 (67)下列有关继承和派生的叙述中,正确的是A) 派生类不能访问基类的保护成员B)作为虚基类的类不能被实例化C)派生类应当向基类的构造函数传递参数D)虚函数必须在派生类中重新实现(68)下列关于构造函数的描述中,错误的是()A)构造函数可以设置默认参数;B)构造函数在定义类对象时自动执行C)构造函数可以是内联函数; D)构造函数不可以重载(69)下面描述中,表达错误的是()A)公有继承时基类中的public成员在派生类中仍是public的B)公有继承时基类中的private成员在派生类中仍是private的C)公有继承时基类中的protected成员在派生类中仍是protected的D)私有继承时基类中的public成员在派生类中是private的(70)应在下列程序划线处填入的正确语句是()#includeclass Base public:void fun()coutBase:funendl;class Derived:public Base void fun()_ /显示调用基类的函数fun()coutDerived:funfun();(71)下列关于构造函数的描述中,错误的是() A)构造函数可以设置默认参数; B)构造函数在定义类对象时自动执行 C)构造函数可以是内联函数; D)构造函数不可以重载(72)下列说法正确的是:A) 一个类的对象可以是另一个类的成员B)一个类可以作为另一个类的派生类C)一个类定义在另一个类的说明中D)以上说法均正确(73)C函数的声明和定义可以分开。函数声明不需要。 A)返回类型B)函数名C)参数表D) 函数体(74)private访问属性限制对象的成员可以在_ 中访问。A)本类的成员函数B) main函数C) 父类的成员函数D) 子类的成员函数(75)如果定义了一个类myclass,则为myclass类对象以成员函数形式重载后+运算符的声明应该为_。A) myclass operator+();B) myclass& operator+();C)myclass operator+( int );D) myclass& operator+( int );(76)如果myclass类定义了拷贝构造函数和一个整型参数的构造函数,还重载了赋值运算符,那么语句myclass obj = 100;会 _。等价于 myclass obj = myclass(100) A) 调用拷贝构造函数B) 调用整型参数的构造函数C)调用赋值运算符D) 引起编译错误(77)抽象类指的是_ 。A)没有任何成员的类B) 只有成员函数没有数据成员的类C) 有虚函数的类D)有纯虚函数的类(78)多重继承时,如果派生类的两个父类有一个共同的虚基类,那么虚基类的初始化参数由 _ 的构造函数来传递。A) 第一个父类B)第二个父类C) 派生类D) 以上都不是(79)多态性是通过_实现的。A)构造函数B)析构函数C) 虚函数D) 函数重载(80)如果有如下语句char str20;cin str;cout SetNum(50)(4)继承的方式有公有继承、私有继承和 保护继承 3种。(5)表达式operator+(x,y)还可以表示为 x+y 。(6)类模板的使用实际上是将类模板实例化成一个具体的 类 。(7)开发一个C+语言程序的步骤通常包括编辑、 编译 、链接、运行和调试。(8)通过使用new和delete两个运算符进行的分配为 动态 存储分配。(9)在C+语言中,访问一个对象的成员所用的运算符是成员选择运算符. ,访问一个指针所指向的对象的成员所用的运算符是成员访问运算符 - 。(10)C+语言支持的两种多态性分别是编译时的多态性和运行时 的多态性。(11)重载的运算符保持其原有的 操作数个数 、优先级和结合性不变。(12)cout.put(A);,还可以表示为coutA 。(13)C+中封装性、继承性和多态性 是面向对象思想的主要特征。(14)假定A为一个类,则语句A(A &a);为该类拷贝构造 函数的原型说明。(15)派生类构造函数的执行顺序是先执行基类 的构造函数,然后执行成员对象的构造函数,最后执行派生类 的构造函数。(16)当一个成员函数被调用时,该成员函数的 this指针 指向调用它的对象。(18)派生类的成员一般分为两部分,一部分是 从基类继承的成员 ,另一部分是自己定义的新成员。(19)如果要把返回值为void的函数A声明为类B的友元函数,则应在类B的定义中加入的语句是 friend void A();。(20)如果类B继承了类A,则称类A为类B的基类,类B称为类A的 派生类 。(21)将x+y中的+运算符用友元函数重载应写为 operator+(x,y) 。(22)已知程序的结果为1 2 3,请填空。#includetemplateclass A public:T x,y,z;void display()cout x y z;void main() Aa1; a1.x=1 a1.y=2 a1.z=3a1.display();(23)已知程序的输出结果如下,请将程序补充完整。Constructor called.Default constructor called.Area is 6Area is 0Area is 6#include class RectAngleprivate:double a,b ;public:RectAngle()coutDefault constructor called.n;RectAngle(double l,double s)a=l;b=s;coutConstructor called.n;void Set(double l,double s) a=l;b=s;void Area()coutArea is a*bendl;int main() RectAngle Rect1(2,3) ;RectAngle Rect2;RectAngle Rect3(Rect1) ;Rect1.Area(); Rect2.Set(0,0) ;Rect2.Area();Rect3.Area();return 0;(24)程序的输出结果如下:请填空The grade is 3#includeclass studentprivate:int grade;public:/* found */student(int thegra):grade(thegra)student()int get_grade()return grade;void main()int thegra=3;student *point=new student(thegra);coutThe grade is get_grade()endl;delete point;(25)C+语言中的多态性是在编译时通过 函数重载 和模板体现的,在运行时是通过 虚函数 体现的。(26)将x+y*z中的“+”用成员函数重载,“*”用友元函数重载应写为 x.operator+(operator*(y,z) 。(27)已知如下程序得输出结果时23,请将划线处缺失得部分补充完整。 #include class myclass public: void print() coutcout_print(); return 0; (28)程序的输出结果如下,请将程序补充完整。a=3 b=13a=5 b=13#includeclass Tpublic:T(int x) a=x ; b+=x;/数据成员初始化void display(T c) couta=c.atb=c.bendl;private:int a;static int b;static int b=5; void main()T A(3),B(5) ;T:display(A);T:display(B);(29)在用class定义一个类时,数据成员和成员函数的默认访问权限是_私有_。(30)含有纯虚函数的类称为_抽象类_。(31)定义内联函数所用的关键字 inline ,定义友元所用的关键字为 friend 。(32) 标准模板库STL中有3个主要组件:_容器_、迭代器、算法。(33)C+中模板分为函数模板和类模板。(34)填空,使该程序执行结果为10。#include classMyClass public: MyClass(inta)x=a; _int getnum()return x;_/取x值 private:intx; ; intmain() MyClassmy(10); coutmy.getnum( )endl; return0; (35)填上合适的字句,使程序的最终结果为200。 #include class number public: number(int i)val=i; operator int(); private: int val; ; number:operator int ( ) return val;class num: public number public: num(int i): number(i) ; void main( ) num n(100);int i=n; couti+nendl; (36)请将如下程序补充完整,使得输出结果为bbaa #include using namespace std; class A public: _A()_cout”aa”; ; class B :public A public: B()cout”bb”; ; int main () B *p=new B; delete p; return 0; (37)程序的输出结果如下,请填空(1,2)5,6(6,9)#includeclass Apublic:A(int i,int j) a=i; b=j; void Move( int x, int y) a+=x;b+=y;void Show() cout (a,b)endl;private :int a,b;class B:private A public:/* found */B(int i,int j,int k,int l): A(i,j) x=k;y=l;void Show()coutx,yendl;void fun()Move(3,5);/* found */void f1()A:Show();private:int x,y;void main ()A e(1,2);e.Show();B d(3,4,5,6);d.fun();d.Show();d.f1();(38)下列程序在构造函数和析构函数中申请和释放类的数据成员int *a,申请时使用形参b初始化a,请填空。class A public:A(int b);A();private:int *a;A:A(int b) a=new int(b);A:A() delete a ;(39)完成下面类中的成员函数的定义。 class test private:int num; float x; public: test(int n,float f); test(test&); ; test:test(int n,float f) num=n; _x=f_; test:test(text& t) _num=t.num_;x=t.x; (40)程序的输出结果如下, 请填空。4 , 520#includeclass A prote

温馨提示

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

评论

0/150

提交评论