1、 一、 选择题(每小题3分, 共48分。)01、 下列关于C+函数的叙述中, 正确的是( )。 A)每个函数至少要具有一个参数 B)每个函数都必须返回一个值 C)函数在被调用之前必须先声明 D)函数不能自己调用自己02、 下列关于类和对象的叙述中, 错误的是( )。 A)一个类只能有一个对象 B)对象是类的具体实例 C)类是对某一类对象的抽象 D)类和对象的关系是一种数据类型与变量的关系03、 在C+中, 用于实现运行时多态性的是( )。 A)内联函数 B)重载函数 C)模板函数 D)虚函数04、 下列关于运算符重载的叙述中, 正确的是( )。 A)经过运算符重载, 能够定义新的运算符 B)有
2、的运算符只能作为成员函数重载 C)若重载运算符+, 则相应的运算符函数名是+ D)重载二元运算符时, 必须声明两个形参05、 对于语句 coutxendl;错误的是描述是( )。 A)”cout”是一个输出流对象 B)”endl”的作用是输出回车换行 C)”x”是一个变量 D)”称作提取运算符06、 有如下类声明, 则类MyDERIVED中保护的数据成员和成员函数的个数是( )。 class MyBASE private: int k; public: void set(int n) k=n; int get( )const return k; ; class MyDERIVED: prote
3、cted MyBASE protected: int j; public: void set(int m, int n) MyBASE:set(m); j=n; int get( ) const return MyBASE:get( )+j; ;A)4 B)3 C)2 D)107、 已知在一个类体中包含如下函数原型: Volume operator-(Volume)const;, 下列关于这个函数的叙述中, 错误的是( )。 A)这是运算符-的重载运算符函数 B)这个函数所重载的运算符是一个一元运算符 C)这是一个成员函数 D)这个函数不改变类的任何数据成员的值08、 执行如下的程序段后, 输
4、出结果是( )。 cout.fill(*); cout.width(6); cout.fill(#); cout 123 endl; A)#123 B)123# C)*123 D)123*09、 在下列函数原型中, 能够作为类AA构造函数的是( )。 A)void AA(int); B)int AA(); C)AA(int)const; D)AA(int);10、 下面四个选项中, ( )是用来声明虚函数的。 A)virtual B)public C)include D)using namespace11、 实现运行时的多态性要使用( )。 A)重载函数 B)构造函数 C)析构函数 D)虚函数
5、12、 要实现动态联编, 必须经过( )调用虚函数。 A)对象指针 B)成员名限定 C)对象名 D)派生类名13、 以下( )成员函数表示纯虚函数。 A)virtual int vf(int); B)void vf(int)=0; C)virtual void vf()=0; D)virtual void vf(int)14、 有如下类声明: class XA private: int x; public: XA(int n) x=n; ; class XB: public XA private: int y; public: XB(int a,int b); ; 在构造函数XB的下列定义中,
6、 正确的是( )。 A)XB:XB(int a,int b): x(a),y(b) B)XB:XB(int a,int b): XA(a),y(b) C)XB:XB(int a,int b): x(a),XB(b) D)XB:XB(int a,int b): XA(a),XB(b) 15、 在表示式 x+y*z中, + 是作为成员函数重载的运算符, * 是作为非成员函数重载的运算符。则 operator+ 有 个参数, operator* 有 参数。( ) A)2、 2 B)2、 1 C)1、 2 D)1、 116、 应在下列程序划线处填入的正确语句是( )。 class Base publi
7、c: void fun()coutBase:funendl; ;class Derived:public Base void fun() /显示调用基类的函数fun() coutDerived:funfun();二、 填空题(每空2分, 共20分。)17、 面向对象程序设计有四个主要特点, 即抽象、 封装、 _和_。18、 非成员函数应声明为类的_函数才能访问这个类的private成员。19、 派生类中的成员不能直接访问基类中的_成员。20、 在用class定义一个类时, 数据成员和成员函数的默认访问权限是_。21、 运算符重载函数可能是类的_函数, 也能够是类的_函数, 还能够是普通函数。2
8、2、 用流对象的成员函数控制输出格式时, 用于设置字段宽度的流成员函数的名称是_, 与之作用相同的控制符名称是_。23、 含有纯虚函数的类称为_。三、 程序的填空、 程序的执行( 每题4分, 共20分。) 24、 以下程序是定义一个计数器类counter, 对其重载运算符”+”, 请填空。class counter private: int n; public: counter() n=0; counter(int i)n=i; _ /运算符重载函数 counter t; t.n=n+c.n; return t; void disp() coutn=nendl;void main() coun
9、ter c1(5),c2(10),c3; c3=c1+c2; c1.disp(); c2.disp(); c3.disp(); 25、 下列程序的输出结果为2, 请将程序补充完整。class Base public: _ void fun() cout1; ;class Derived: public Base public: void fun( ) coutfun( ); delete p; return 0; 26、 写出执行下面程序的输出结果。void fun(int &x, int y) int t=x; x=y; y=t; int main( ) int a2 = 23, 42; f
10、un(a1,a0); std:couta0,a1std:endl; return 0; 27、 写出执行下面程序的输出结果。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; 28、 写出执行下面程序的输出结果。class Base private: char c; public: Base(char n):c(n) virtual Base()coutC; ; class Der:publ
11、ic Base private: char c; public: Der(char n):Base(n+1),c(n) Der()coutC; ; int main() Der(X); return 0; 四、 编程题(12分)29、 编写一个程序计算”三角形、 正方形、 圆形”三种图形的面积, 要求: a)抽象出一个基类base; b)在其中说明一个虚函数用来求面积; c)利用派生类定义”三角形、 正方形、 圆形”; d)编写主函数并测试。参考答案一、 选择题(每小题3分, 共48分。)01-05 C A D B D06-10 B B A D A11-16 D A C B C C二、 填空题
12、(每空2分, 共20分。)17、 继承、 多态性18、 友元19、 私有20、 private或私有21、 成员、 友元22、 width/setw23、 抽象类三、 程序的填空、 程序的执行( 每题4分, 共20分。) 24、 counter operator + (counter c)25、 virtual26、 23,2327、 ABC28、 XY四、 编程题(12分)29、 #include using namespace std;class base public: virtual float area() const return 0; ;class triangle: publi
13、c base protected: float bian,height; public: triangle(float a=0, float h=0) bian=a; height=h; virtual float area() const return bian*height/2; ;class square: public base protected: float bian; public: square(float a=0) bian=a; virtual float area() const return bian*bian; ;class circle: public base protected: float radius; public: circle(float r=0) radius=r; virtual float area() const return 3.14*radius*radius; ;int main() triangle t(3,4); square s(5); circle c(2); base *p; p=&t; couttriangles area:area()endl; p=&s; coutsquares area:area()endl; p=&c; coutcircles area:area()endl; return 0;