面向对象程序设计练习题(2)
一、单项选择题(本大题共10小题,共20分)
在每小题列出的四个选项中,只有一个是符合题目要求的,请将其代码填在题后的括号内。错选或未选均无分。
单项选择题(本大题共20小题,每小题1分,共20分)
1.面向对象程序设计中的数据隐藏指的是
A.输入数据必须输入保密口令
B.数据经过加密处理
C. 对象内部数据结构上建有防火墙
D.对象内部数据结构的不可访问性
2.下列各项中不符合函数重载必须满足的条件的是 A. 必须有不同的参数个数
B.对应的参数类型必须不相同
C. A和B必须同时满足
D.A和B只要满足一个即可
3.下列带缺省值参数的函数说明中,正确的说明是
A.int Fun(int x,int y=2,int z=3);
B.int Fun(int x=1,int y,int z=3);
C. int Fun(int x,int y=2,int z);
D.int Fun(int x=1,int y,int z=3);
4.有如下的对类“CSample”的说明,其中 是错误的。
class CSample {
A.int a=23;
B.CSample();
public:
C.CSample(int val);
D.~ CSample();
}
5.已知类A中的一个成员函数的说明如下:
void Set(A &a);
则该函数的参数“A &a”的含义是
A.指向A的指针为a
B.将变量a的地址赋给类A
C.类A对象引用a用作函数的形参
D.变量A与a按位与后作函数参数
6.若类A和类B的定义如下:
class A {
public:
int i,j;
void get();
};
class B:A {
int i,j;
protected:
int k;
public:
void make();
};
void B::make() { k=i*j; }
则其中 是非法的表达式。 A.void get();
B.int k;
C.void make();
D.k=i*j;
7.下面的主程序中,语句 是错误的。
class A {
int i;
public:
virtual void fun()=0;
A(int a) { i=a; }
};
class B {
int j;
public:
void fun() { cout<<”B::fun()\n”; }
B(int b,int c) :A(b) { j=c; }
};
void main()
A.{ A a(5);
B.A *pa;
C.B b(7);
D.B *pb;
}
8.拷贝(复制)构造函数的作用是
A.进行数据类型的转换
B.用对象调用成员函数
C.用对象初始化对象
D.用一般类型的数据初始化对象
9.下列说法中,正确的说法是
A.所有的运算符都能被重载
B.运算符被重载时,它们的优先级与结合性不会改变
C.当需要时,我们可以自定义一个运算符来进行重载
D.每个运算符都可以被重载成成员函数和友元函数
10.下面对结构或类中成员的访问中,不正确的访问是
A.*pointer.salary; (其中pointer为指向类对象的指针)
B.pointer->salary;
C.x=worker.salary; (其中worker为具有类类型的对象)
D.Location &rA=A1;int x=rA.GetX(); (Location为已定义的类,A为对象)
二,填空题(本大题共10小题,共20分)
不写解答过程,将正确的答案写在每小题的空格内。错填或不填均无分。
11.面向对象程序设计中的多态性包括静态多态性和动态多态性,前者由____________机制支持,而后者则由____________机制支持。
12.由char const *str=”stucture”;所以定义的指针称为____________,关键字const 所修饰的是____________。
13.引入虚基类的目的是为了解决多重继承中的____________和____________问题。
14.派生类中所定义的虚函数的____________不影响对它的动态联编,即基类中已定义的虚函数,其同名函数放在派生类中的__________,都可以实现运行时多态性。
15.构造函数与析构函数所调用的虚函数是____________的函数,因此调用时实现的是____________联编。
16.C++的____________规则能保证编译器调用正确的成员函数。有时为更保险地保证编译器调用正确的成员函数,可以使用____________操作符。
指向类成员函数的指针
17.说明一个const成员函数(又称常量成员函数)的方法是,将const写在__________之间,而且它修饰的是__________。
18.除析构函数外,不能带有参数的函数还有____________,而且它的返回数据类型不能随便指定,而由____________来决定。
19.当使用new动态生成一个对象时,隐含着对____________的一次调用;而当使用delete删除一个对象时,隐含着对____________的一次调用。
20.对某个运算符的重载,实际上是用关键字____________与该运算符组成一个运算符函数,而且该运算符函数的返回类型不能是____________的。
三,改错题(本大题共5小题,每小题2分,共10分)
21.分析下列程序中的错误,并说明出错原因。
# include
class base {
const int n;
public:
base() { cout<<”Initializing default\n”; }
base(int m) { cout<<”Initializing\n”; n=m; }
~base() { cout<<”Destroying\n”; }
};
void main()
{ base x=1;
base y=x;
}
22.分析下列程序中的错误,并说明出错原因。
#include
class AA {
public: int aa;
};
class BB:virtual public AA {
int bb;
};
class CC:virtual public AA {
public: int bb;
};
class DD:public BB,public CC {
public: float dd;
};
void main()
{ DD p;
int m=p.aa;
AA *pr=&p;
AA &pt=p;
DD *pp=(DD *)(BB *)pr;
AA r;
DD &ps=r;
}
23.分析下列程序中的错误,并说明出错原因。
#include <iostream.h>
class A {
int x;
public:
A(int a) { x=a; fun(); }
virtual void fun()=0;
};
class B:public A {
public:
B(int b) :A(b) {}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论