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