1、面向对象程序设计试卷第一部分 选择题一、单项选择题在每小题列出的四个备选项中只有一个是符合题目要求的,请将其选出并将“答题卷”上的相应字母涂黑。错涂、多涂或未涂均无分。1在C+中,函数原型不能标识 A函数的返回类型 B函数参数的个数 C函数参数类型 D函数的功能 2在C+程序中,对象之间的相互通信通过 A继承实现 B调用成员函数实现 C封装实现 D函数重载实现3对于任意一个类,析构函数的个数最多为 A0 B1 C2 D34假定一个二维数组的定义语句为“int a34=3,4,2,8,6;”,则元素a12的值为A2 B4 C6 D85友元关系不能 A继承 B是类与类的关系 C是一个类的成员函数与
2、另一个类的关系 D提高程序的运行效率6对重载函数形参的描述中,错误的是 A 参数的个数可能不同 B 参数的类型可能不同C 参数的顺序可能不同 D 参数的个数、类型、顺序都相同,只是函数的返回值类型不同7下面说法正确的是 A内联函数在运行时是将该函数的目标代码插入每个调用该函数的地方 B内联函数在编译时是将该函数的目标代码插入每个调用该函数的地方 C类的内联函数必须在类体内定义 D类的内联函数必须在类体外通过加关键字inline定义8可以用p.a的形式访问派生类对象p的基类成员a,其中a是 A私有继承的公有成员 B公有继承的私有成员 C公有继承的保护成员 D公有继承的公有成员9在公有派生情况下,
3、有关派生类对象和基类对象的关系,不正确的叙述是 A派生类的对象可以赋给基类的对象 B派生类的对象可以初始化基类的引用 C派生类的对象可以直接访问基类中的成员 D派生类的对象的地址可以赋给指向基类的指针10在每个C+程序中都必须包含有这样一个函数,该函数的函数名为。AmainBMAINCnameDfunction11设x和y均为bool量,则x&y为真的条件是A它们均为真B其中一个为真C它们均为假D其中一个为假12下面的哪个保留字不能作为函数的返回类型?AvoidBintCnewDlong13假定a为一个整型数组名,则元素a4的字节地址为Aa+4Ba+8Ca+16Da+3214假定AB为一个类,
4、则执行“ABa(4),b3,*p2;”语句时,自动调用该类构造函数的次数为。A3B4C6D915假定要对类AB定义加号操作符重载成员函数,实现两个AB类对象的加法,并返回相加结果,则该成员函数的声明语句为:AABoperator+(AB&a,AB&b)BABoperator+(AB&a)Coperator+(ABa)DAB&operator+()16循环语句whlie(int i=0 )i-;的循环次数是A 0 B1 C 5 D 无限17如果有int x,*p; float y,*q;则下面操作正确的是Ap=x Bp=q Cp=&x Dp=&y18已知:print( )函数是一个类的常成员函数
5、,它无返回值,下列表示中,正确的是 A void print( ) const; B const void print( ); C void const print( ); D void print(const);19下列表示引用的方法中,正确的是已知:int a=1000;A int &x=a; B char &y; C int &z=1000; D float &t=&a;20下列的各类函数中,不是类的成员函数A 构造函数 B 析构函数 C 友元函数 D 复制构造函数第二部分 非选择题二、填空题21定义类的动态对象数组时,系统只能够自动调用该类的_构造函数对其进行初始化。22无论是什么继承
6、方式,派生类的成员不能访问基类_属性的成员。23表达式coutend1还可表示为_ _。24基类的公有成员在派生类中的访问权限由_决定。25C+支持的两种多态性分别是_多态性和_多态性。26C+中语句const char * const p=hello;所定义的指针p和它所指的内容都不能被 _。27假定AB为一个类,则语句AB(AB&x);为该类函数的原型说明。28说明常成员函数时,关键字const写在成员函数的_和_之间。29在C+中,访问一个对象的成员所用的运算符是_,访问一个指针所指向的对象的成员所用的运算符是_。30派生类从一个或多个以前定义的该类的_继承数据和函数。三、完成程序题31
7、在下面横线处填上适当字句,完成类中成员函数的定义。class A int * a; public: A(int aa=0) a= A( ) ; 32下面是一个函数模板,用于计算两个向量的和。在下面横线处填上适当字句,完成函数模板定义。include templateT* f(T* a,T* b,int n) T* c= _; for(int i=0;in;i+) ci= _ _; return c;void main() int a5=1,2,3,4,5,b5=10,20,30,40,*p; p=f(a,b,5); for(int i=0;i5;i+) coutpiendl;33下面是类fra
8、ction(分数)的定义,其中重载的运算符以分数形式输出结果,例如将三分之二输出为2/3。在横线处填上适当字句。class fraction int den; /分子 int num; /分母 friend ostream& operator(ostream&,fraction); ;ostream& operator (ostream& os,fraction fr) _ _; return _ _ _; float a=2; coutfun(a);34下面是一个用户口令检查程序,在横线处填上适当语句完成程序功能。include include _ ;/定义由PASS指针所指向的口令woll
9、eh。void main() char user10;/用于存放输入的口令 coutplease input your password:endl; _/输入口令 if(strcmp(user,PASS)=0) coutyour password is correctendl; else coutyour password is errorendl;35在下面程序横线处填上适当的字句,使其输出结果为0,56,56。include class base public: _ _func( )return 0;class derived:public base public: int a,b,c;
10、_ _ _ setValue(int x,int y,int z)a=x;b=y;c=z; int func( )return(a+b)*c;void main() base b; derived d; coutb.func( ),; d.setValue(3,5,7); coutd.func( ),; base& pb=d; coutpb.func( )end1;四、程序分析题36给出下面程序的输出结果。 #includeusing namespace std;void fun(int &a, int &b) int p; p=a; a=b; b=p;void exchange(int &a, int &b, int &c) if( ab ) fun(a, b); if( ac ) fun(a, c); if( bc ) fun(b, c);int main() int a=12,b=89,c=56; exchange(a, b, c); couta=a,b=b,c=cendl; return 0;37请写出下面程序段的输出结果。#include using namespace std;class A public: A( ) cout A; ;class B public:B( ) cout B; ;