C面向对象程序设计模拟试题六.doc
C+面向对象程序设计模拟试题六一、单项选择题(本大题共15小题,每小题2分,共30分)在每小题列出的四个备选项中,只有一个是苻合题目要求的。请将其代码填写在题后的括号内。错选,多选或未选均无分。1类的析构函数的作用是( d )。 A) 作为类的一般成员函数B) 类的初始化C) 对象的初始化D) 对象的删除2一个类的友元函数或友元类可以访问该类的( d )。A) 私有成员 B) 保护成员 C) 公有成员 D) 所有成员3下列关于成员函数特征的描述中,( a ) 是错误的。A) 成员函数一定是内联函数 B) 成员函数可以重载C) 成员函数可以设置参数的默认值 D) 成员函数可以是静态的4下列函数中,( c ) 不是类的成员函数。A) 构造函数 B) 析构函数 C) 友元函数 D) 拷贝构造函数 5下列对派生类的描述中,( d ) 是错误的。 A) 一个派生类可以作为另一个派生类的基类 B) 派生类至少有一个基类 C) 派生类的成员除了它自己的成员外, 还包含了它的基类的成员 D) 派生类中继承的基类成员的访问权限到派生类中保持不变 6下列的描述中,( b ) 是错误的。A) 公有继承时基类中的public成员在派生类中仍是public的 B) 公有继承时基类中的private成员在派生类中仍是private的 C) 公有继承时基类中的protected成员在派生类中仍是protected的 D) 私有继承时基类中的public成员在派生类中仍是private的 7下列虚基类的声明中正确的是( d )。 A) class virtual B: public A B) virtual class B: public A C) class B: public A virtual D) class B: virtual public A 8若类A和类B的定义如下:class A int i, j; public: A(int m, int n): i(m), j(n) int Geti() return i; ;class B: public Aint k; public: B(int m, int n, int u): A(m, n), k(u) void Make() k = i * j; ;int main()B b(1, 2, 3);return 0;则上述定义中,( d ) 是非法的表达式.A) k=i*j; B) int k; C) return i; D) void Make( ) 9若有以下程序:#include <iostream>using namespace std;class A public: int a; A() a =10; ; class A1: public A1 public: A1() a = a + 1; ; class A2: public A public: A2() a = a + 2; ; class B: public A1, public A2 public: B() void Print() cout << a << endl; ;int main()B obj; obj.Print();return 0;则程序运行后的输出结果为:A) 产生语法错误 B) 13 C) 12 D)1010在下面的4个关键字中,( a ) 是用来说明虚函数的。A) virtual B)public C)protected D)private 11实现运行时的多态要使用( d )。A) 重载函数 B) 析构函数 C) 构造函数 D) 虚函数 12如果一个类至少有一个纯虚函数, 那么该类称为( a )。A) 抽象类 B) 虚基类 C) 派生类 D) 以上都不对 13cin是某个类的标准对象,该类是( b )。A) ostreamB) istreamC) stdoutD) stdin 14调用一个成员函数时,使用动态联编的情况是(b )。A) 通过对象调用一虚函数 B) 通过指针或引用调用一虚函数 C) 通过对象调用一静态函数D) 通过指针或引用调用一静态函数15假定CTest为一个类,并且有一无默认值的有参构造函数和一无参构造函数,则执行“CTest objTest;”语句时将自动调用该类的( b )。 A) 有参构造函数 B) 无参构造函数 C) 拷贝构造函数 D) 赋值重载函数 二、判断正误题(本大题共5小题,每小题2分,共10分)判断正误,在题后的括号内,正确的划上“”错误的划上”×”。1在用class定义一个类时, 数椐成员和成员函数默认的访问权限是public。2若类Y是类X的私有派生类, 类Z是类Y的公有派生类, 则类Z不能访向类X的公有成员和保护成员。3C+中设置虚基类的目的是实现运行时的多态。4模板类与类模板的意义完全相同。5只有常成员函数才可以操作常对象。三、填空题(本大题共5小题,每小题2分,共10分)将正确的答案写在每小题的空格内,错填或不填均无分。1类的具体表现是通过创建 来操作的。2假定AB为一个类,则执行“AB a10;”语句时,系统自动调用该类的构造函数的次数为 。3使用函数模板的方法是先说明函数模板,然后实例化成相应的 进行调用 执行。4拷贝构造函数用它所在类的 作为参数。5重载运算符“<<”的函数名为 。四、程序分析题(本大题共8小题,每小题3分,共24分)给出下面各程序的输出结果。1若有以下程序:#include <iostream.h> class A int a; public:A(int aa = 0 ) a = aa; cout << "A(): " << a << endl; ;class B: public A int b;public:B(int aa = 0, int bb = 0): A(aa) b = bb; cout << "B(): " << b << endl; ;int main() B x(5), y(6,7); return 0;输出结果为:2若有以下程序:#include <iostream.h>class Point int x, y;public:Point(int m = 0, int n = 0) x = m; y = n; void Show() cout << "x=" << x << ", " << "y=" << y << endl; ;int main( )Point *p = new Point(1, 68);p->Show();delete p;return 0;输出结果为:3若有以下程序:#include <iostream.h>class Sample int n;public:Sample(int i) n = i; s += n; static int s;void Show() cout << s << endl; ;int Sample:s = 0;int main()Sample a(2), b(5), c(8);c.Show();return 0;输出结果为: 4若有以下程序:#include <iostream.h>class Sample int n;public:Sample(int i) n = i; void Print() cout << "1:n=" << n << "," void Print( ) const cout << "2:n=" << n << endl; ; int main()Sample a(10); const Sample b(20); a.Print(); b.Print(); return 0;输出结果为:5若有以下程序:#include <iostream.h>class Test int x; public: void Setx(int i) x = i; int Putx() return x; ;int main()Test *p; Test a3; a0.Setx(5); a1.Setx(6); a2.Setx(7);for( int j = 0; j < 3; j+) p = &aj; cout << p->Putx() << "," cout << endl;return 0;输出结果为: 6若有以下程序:#include <iostream.h>class Basepublic: Base(int x) a = x; void Show() cout << a << endl; private: int a; ;class Derived: public Basepublic: Derived (int i): Base(i + 1), b(i) void Show() cout << b << endl; private: int b; ;int main() Base b(5), *pb;Derived d(1); pb = &d; pb->Show(); return 0;输出结果为: 7若有以下程序:#include <iostream.h> class Base public:void Fun() cout << "1" << endl; ;class Derived: public Basepublic:void Fun() cout << "2" << endl; ;int main()Derived a;Base *p;p = &a;(*p).Fun();a.Fun();return 0;输出结果为: 8. 下列程序的输出结果为 #include <iostream.h>template <typename TT>class FF TT a1,a2,a3;public:FF(TT b1,TT b2, TT b3) a1 = b1; a2 = b2; a3 = b3; TT Sum() return a1 + a2 + a3; ;int main()FF <int> x(2, 3, 4), y(5, 7, 9);cout << x.Sum( ) <<' ' << y.Sum() << endl;return 0;输出结果为: 六、 编程题(本大题共2小题,每小题10分,共20分)1设计一个类Rect,要求如下:(1)该类中的私有数据成员length,width存放它的长和宽,并且设置它们的默认值是0。(2)通过成员函数设置其长和宽,并确保长和宽都在(0,50)范围之内。 (3)实现求周长函数GetPerimeter()。2定义一个二维座标类Vector2d, 二个数据成员为double型x, y 为private属性。定义代二个参数的构造函数和一个Show( ) 函数用以输出x, y的值, 另外作为成员函数重载的运算苻”+”的功能是将此类二个对象的数据成员x和y对应相加。这些成员函数的属性均为public. 请用C+编写此程序, 并编写测试程序进行测试C+面向对象程序设计模拟试题六参考答案一、单项选择题(本大题共15小题,每小题2分,共30分)在每小题列出的四个备选项中,只有一个是苻合题目要求的。请将其代码填写在题后的括号内。错选,多选或未选均无分。1D) 2D) 3A)4C)5D)6B) 7D)8A)9A)10A).11D)12A)13B)14B)15B) 二、判断正误题(本大题共5小题,每小题2分,共10分)判断正误,在题后的括号内,正确的划上“”错误的划上”×”。1参考答案:“×”2参考答案:“×”3参考答案:“”4参考答案:“×”5参考答案:“”三、 填空题(本大题共5小题,每小题2分,共10分)不写解题过程, 将正确的答案写在每小题的空格内,错填或不填均无分1参考答案:对象2参考答案:103参考答案:模板函数4参考答案:引用5参考答案:operator <<四、程序分析题(本大题共8小题,每小题3分,共24分)给出下面各程序的输出结果。1输出结果为:A(): 5B(): 0A(): 6B(): 72输出结果为: x=1, y=683输出结果为: 154输出结果为:1:n=10,2:n=205输出结果为:5,6,76程序的输出结果为:27程序的输出结果为:1 28程序的输出结果为:9 21六、 编程题(本大题共2小题,每小题10分,共20分)1参考程序:#include <iostream>using namespace std;class Rect private:double length, width; public: Rect(double l = 0, double w = 0): length(l), width(w) void Set(double l, double w) if (length <= 0 | length >= 50 | width <= 0 | width >= 50 ) throw "数据不在指定范围(0,50)!"/ 抛出异常length = l;width = w;double GetPerimeter() return 2 * (length + width); ;int main() try/ 检查异常Rect obj(1, 8);cout << "周长:" << obj.GetPerimeter() << endl;catch (char *str)/ 捕捉异常/ 处理异常cout << "异常信息:" << str << endl;/ 输出异常信息return 0;2参考程序:#include <iostream >using namespace std;class Vector2d double x, y; public: Vector2d(double a, double b): x(a), y(b) void Show() cout << x << " " << y << endl; Vector2d operator+(Vector2d &obj); ;Vector2d Vector2d:operator+(Vector2d &obj) return Vector2d(x + obj.x, y + obj.y); int main() Vector2d d1(3.5, 4.5), d2(2.5, 5.5), d3(0.0, 0.0);d3 = d1 + d2; d3.Show(); return 0;