1、C+面向对象程序设计模拟试题三一、单项选择题(本大题共10小题,每小题2分,共20分)在每小题列出的四个备选项中,只有一个是符合题目规定的,请将其代码填写在题后的括号内。错选、多选或未选均无分。1下面有关重载函数的描述中,对的的是( )。A)重载函数必须具有不同的返回值类型 B)重载函数形参个数必须不同C)重载函数必须具有不同的形参表D)重载函数名可以不同2假定MyCIass为一个类,那么下列的函数说明中,( )为该类的析构函数。A)voidMyClass();B)MyClass(int n);C)MyClass( );D)MyClass( );3( )是以一种完全通用的方法来设计函数或类而不
2、必预先说明将被使用的每个对象的类型。 A)模板B)类C)对象D)函数4下面关于静态成员函数的途术中错语的是( )。A. 静态成员函数可以有返回值 B. this指针可以指向静态成员函数C. 静态成员函数可以具有指针参数 D. 静态成员函数可有具有返回值类型5定义类模板时要使用关键字( )。A. private B. public C. delete D. template6下列是重载乘法运算符的函数原型声明,其中错误的是( )。A)MyClass operator*(double,double);B)MyClass operator*(double,MyClass);C)MyClass ope
3、rator*(MyClass,double);D)MyClass operator*(MyClass,MyClass);7以下( )成员函数表达纯虚函数。A)virtual int fun(int)B)void fun(int)=0C)virtual void fun()=0D)virtual void fun(int)8关于纯虚函数,下列表述中对的的是( )。A)纯虚函数的声明总是以=0结束B)具有纯虚函数的类可以定义对象C)具有纯虚函数的类是抽象类 D)上面都是错误的 9( )解决二义性问题。A. 只能使用作用域分辨操作符B. 只能使用虚基类C. 使用作用域分辨操作符或虚基类D. 上面都不
4、能10实现编译时的多态性要使用( )。A)重载函数B)析构函数C)构造函数D)虚函数二、填空题(本大题共5小题,每小题2分,共10分)不写解答过程,将对的的答案写在每小题的空格内。错填或不填均无分。1定义一个函数名为fun,返回值为int,没有参数的纯虚函数的声明是( )。2定义静态成员函数应使用关键字( )。3在C+中,假如类的名称是CTest,则此类的构造函数名称为( )。4在类的对象被创建时,( )函数会被自动调用。5类中数据成员和成员函数的默认访问级别为( )。三、完毕程序填题(本大题共3个小题,每小题3分,共9分)下面程序都留有空白,请将程序补充完整, 1请完毕下面的程序#inclu
5、de / 预解决命令using namespace std;/ 使用标准命名空间std/ 测试静态成员类class Testprivate: 1 int count;/ 对象数public:Test() count+; / 构造函数, 实现对对象进行计数static void Show() cout 共有 count 个对象! endl; / 显示对象数;int Test:count = 0;/ 初始化静态数据成员赋初值int main(void)/ 主函数main(void)Test obj1, obj2, obj3;/ 定义对象Test:Show();/ 显示对象数return 0; /
6、返回值0,返回操作系统2请完毕下面的程序#include / 预解决命令using namespace std;/ 使用标准命名空间std/ 整数类class Integerprivate:int a;/ 数据成员public:Integer(int x = 0) a = x; / 构造函数operator int() return a; / 类型转换函数Integer operator+(const Integer &i) const/ 重载加法运算符+return 2 ;/ 返回和;int main(void)/ 主函数main(void)Integer a(2), b(3), c;/ 定
7、义整数对象c = a + b;/ 求和cout c endl;/ 显示和return 0; / 返回值0, 返回操作系统3请完毕下面的程序#include / 预解决命令using namespace std;/ 使用标准命名空间stdtemplate class A private:ElemType a;/ 数据成员public:A(ElemType x): a(x) / 构造函数void Show() const cout a endl; / 显示a之值;int main(void)/ 主函数main(void)A obj(Hello, world!);/ 定义对象obj.Show();/
8、 显示相关信息return 0;/ 返回值0, 返回操作系统四、程序分析题(本大题共4小题,每小题5分,共20分)给出下面各程序的输出结果。1阅读下面程序,写出输出结果。#include / 预解决命令using namespace std;/ 使用标准命名空间stdclass Pointprivate:int x;/ x坐标int y;/ y坐标public:Point(int a = 0, int b = 0):x(a), y(b)int GetX() const return x; int GetY() const return y; void SetX(int a) x = a; vo
9、id SetY(int b) y = b; ;int main(void)Point obj1;const Point obj2(9, 98);cout obj1.GetX() endl;obj1.SetX(5);cout obj1.GetX() endl;obj1.SetY(18);cout obj1.GetY() endl;cout obj2.GetX() endl;cout obj2.GetY() endl;return 0; / 返回值0,返回操作系统上面程序的输出结果为:1参考答案:05189982阅读下面程序,写出输出结果。#include / 预解决命令using namespa
10、ce std;/ 使用标准命名空间stdclass Arrayprivate:int *elem;/ 数组元素存储空间int size;/ 数组元素个数public:Array(int a, int sz): elem(a), size(sz) / 构造函数int GetSize() return size; int &operator(int pos) return elempos - 1; / 重载下标运算符;int main(void)int a = 1, 2, 3, 4, 5;Array obj(a, 5);obj1 = 8;for (int i = 1; i = obj.GetSiz
11、e(); i+)/ 依次输出数组各元素之值cout obji ;cout endl;return 0; / 返回值0, 返回操作系统上面程序的输出结果为:3阅读下面程序,写出输出结果。#include / 预解决命令using namespace std;/ 使用标准命名空间stdclass Apublic:A() cout 构造A endl; / 构造函数A() cout 析构A endl; / 析构函数;class B: public Apublic:B() cout 构造B endl; / 构造函数B() cout 析构B endl; / 析构函数;int main(void)B obj
12、;A *p = new A;return 0; / 返回值0, 返回操作系统上面程序的输出结果为:4阅读下面程序,写出输出结果。#include / 预解决命令using namespace std;/ 使用标准命名空间stdtemplate ElemType f(ElemType x) return x * (ElemType)5.1; template void f(ElemType x, ElemType y) x = x * 1.1;y = y * 1.1;cout x endl;cout y endl;int main(void)cout f(3.0) endl;f(1, 2);f(
13、1.0, 2.0);system(PAUSE); / 调用库函数system( ), 输出系统提醒信息return 0; / 返回值0, 返回操作系统上面程序的输出结果为:五、程序改错题(本大题共3小题,每小题5分,共15分)指出下面程序中的错误,说明错误因素,并加以改正。1下面程序中类的定义中有一处错误,请指出犯错的行,说明错误因素,并加以改正。#include /1using namespace std;/2/3class A/4/5public:/6A(int x = 0, int y = 0): a = x, b = y /7void Show()/8/9cout a b endl;/
14、10/11/12private:/13int a, b;/14;/15/16int main(void)/17/18A obj(18);/19obj.Show();/20/21return 0;/22/232下面程序中类的定义中有一处错误,请指出犯错的行,说明错误因素,并加以改正。#include / 预解决命令/1using namespace std;/ 使用标准命名空间std/2/3template /4ElemType Max(ElemType a, ElemType b)/5/6return (a b) ? a : b;/5/6/7int main(void)/8/9cout Max
15、(16.8, 518) endl;/10/11return 0;/ 返回值0, 返回操作系统/12/133下面程序中类的定义中有一处错误,请指出犯错的行,说明错误因素,并加以改正。#include /1using namespace std;/2/3class Integer/4/5public:/6Integer(int a = 0): i(a) /7/8int operator int()/9/10return i;/11/12/13private:/14int i;/15;/16/17int main(void)/18/19Integer obj(168);/20cout obj a +
16、 i.a 3参考答案:3 char *四、程序分析题(本大题共4小题,每小题5分,共20分)给出下面各程序的输出结果。1参考答案:05189982参考答案:8 2 3 4 53参考答案:构造A构造B构造A析构B析构A4参考答案:15.3121.12.2五、程序改错题(本大题共3小题,每小题5分,共15分)指出下面程序中的错误,说明错误因素,并加以改正。1参考答案:第7行“a = x, b = y”有错,初始列表的格式错,应改为“a(x), b(y)”。2参考答案:第10行有错,模板函数无隐式转换功能,函数调用Max(16.8, 518)无法拟定参数类型,可第11行的“Max(16.8, 518
17、)”改为“Max(16.8, 518.0)”。3参考答案:第9行“int operator int()”有错,类型转换函数不能有返回值类型,可改为“operator int()”。六、编程题(本大题26分)参考程序:#include / 预解决命令using namespace std;/ 使用标准命名空间stdconst double PI = 3.1415926;/ 定义常量PIclass Shapepublic:Shape() / 构造函数virtual Shape() / 析构函数virtual Show() = 0;/ 显示面积static double totalArea;/ 总面
18、积static void ShowTotalArea() cout 总面积: totalArea endl; ;class Circle: public Shapeprivate:double radius;/ 半径public:Circle(double r): radius(r) totalArea += PI * r * r; / 构造函数Circle() / 析构函数virtual Show() cout 圆面积: PI * radius * radius endl; ;/ 显示面积;class Rectangle: public Shapeprivate:double length;
19、/ 长double width;/ 宽public:Rectangle(double l, double w): length(l), width(w) totalArea += l * w; / 构造函数Rectangle() / 析构函数virtual Show() cout 矩形面积: length * width endl; ;/ 显示面积;double Shape:totalArea = 0;/ 初始化totalAreaint main(void)Circle c(1);/ 定义圆对象c.Show();/ 显示面积Rectangle r(1, 2);/ 定义矩形对象r.Show();/ 显示面积Shape:ShowTotalArea();/ 显示总面积return 0; / 返回值0, 返回操作系统