C++期末考试试题(10页).doc
-一、 单项选择题(12题,每题5分)1. 已定义了一个类A并有语句 A* pa=new A(5); 那么以下说法正确的是:DA. 该语句会创建A类的一个对象,并将此对象的地址赋给指针pa;B. 该语句会创建A类的5个对象,且它们的地址是连续的;C. 当指针变量pa超出其作用域时,pa和为对象分配的空间都将被自动释放;D. 类A中一定有一个显式定义的构造函数和一个显式定义的虚析构函数;2. 定义类A的非静态成员函数A& f(A& one)时,需有语句return exp;则exp不能是:DA.类A中类型为A的静态数据成员 B. f中用语句 A a = one; 定义的量aC. one D. *this3. 在一个类中,下列哪些成员可以是多个?DA. 无参构造函数 B. 析构函数C. 原型相同的非静态成员函数 D. 静态成员函数4. 对于通过公有继承定义的派生类,若其成员函数可以直接访问基类的某个成员,说明该基类成员的访问权限是:DA. 公有或私有 B. 私有 C. 保护或私有 D. 公有或保护5. 在下列关键字中,不能用来表示继承方式的是:BA. private B. static C. public D. protected6. 下列有关运算符重载的叙述中,正确的是:AA. 运算符重载是多态的一种表现B. C+中可以通过运算符重载创造新的运算符C. C+中所有运算符都可以作为非成员函数重载D. 重载运算符时可以改变其结合性A7. 下列关于类定义的说法中,正确的是:A. 类定义中包括数据成员与函数成员的声明B. 类成员的缺省访问权限是保护的C. 数据成员必须被声明为私有的D. 成员函数只能在类体外进行定义8. 建立一个有成员对象的派生类对象时,各构造函数体的执行顺序为:CA. 派生类 成员对象类 基类 B. 成员对象类 基类 派生类C. 基类 成员对象类 派生类 D. 基类 派生类 成员对象类9. C+中解决命名冲突的机制是:AA. 虚基类 B. 虚函数 C. 函数重载 D. 名字空间10. 任意一个类,析构函数的个数最多是:BA. 不限个数 B. 1 C. 2 D. 311. 在类定义中,为说明成员的访问权限,private, protected, public 可以出现次数为:AA. 次数没有具体限定 B. 每种至多一次C. public 至少一次 D. 每种至少一次12. 下面关于访问类A的私有数据成员的说法,错误的是:CA.类A的友元函数可以访问类A的私有成员。 B.类A的友元类中的非静态成员函数可以访问类A的私有成员。C.类A的嵌套类中的非静态成员函数可以访问类A的私有成员。D.类A中的非静态成员函数可以访问类A的私有成员。 二、 写出下面程序的运行结果(2题,每题10分)1. #include <iostream.h>class A public: A( ) cout<<"<1> A:A( ) "<<endl;virtual A( ) cout<<"<2> A:A( )"<<endl;virtual void g( ) cout<<"<3> A:g( )"<<endl;void h( ) cout<<"<4> A:h( )"<<endl;virtual void f( ) g( ); h( ); ;class B:public Apublic: B( ) cout<<"<5> B:B( ) "<<endl; virtual B( ) cout<<"<6> B:B( )"<<endl;virtual void g( ) cout<<"<7> B:g( )"<<endl; void h( ) cout<<"<8> B:h( )"<<endl; virtual void k( ) f( ); g( ); h( ); ;void main( ) B b;b.k( );2. #include <iostream.h>class A public:A( ) cout<<1<<endl; virtual A( ) cout<<2<<endl;virtual int Add(int n) return 0; ;class B : public A public:B(int n):num(n) virtual B( ) virtual int Add(int n) num+=n; return num;private:int num;class C : public Apublic:C(A& obj,int n) : a(obj), num(n) cout<<3<<endl; virtual C( ) cout<<4<<endl; virtual int Add(int n) return a.Add(n+num); private:A& a;int num;Int main ( ) B b(100);C c1(b,1), c2(c1,2);cout<<c2.Add(50)<<endl;return0;三、 编程题(20分)已知某程序中类MyString是自定义的一个用来描述字符串的类,它在main函数中使用情况如下:void main( ) MyString s1("Hello ");MyString s2("World!"); cout << s1.getString() << s2.getString( ) << endl; MyString s3(s1); cout << s3.getString( ) << endl; s3 = s1 + s2; cout << s3.getString( ) << endl; 程序执行时,输出结果如下:Hello World!HelloHello World!根据以下已知条件,完成对MyString类的定义和实现。(1) 可以使用iostream.h中定义的类及相关内容。(2) 可以使用string.h中定义的如下函数:int strlen(const char* ); 用于计算标准表示的字符串长度;char* strcpy( char *strDestination, const char *strSource );用于将strSource串拷贝给strDestination。返回的是strDestination串,一般不用。char* strcat( char *strDestination, const char *strSource );用于将strScource串接于strDestination串后。返回的是strDestination串, 一般不用。本题目要求:根据上述已知条件,不借用其它标准函数库或类库,遵循上面程序输出结果,完成MyString类的定义和实现。第 10 页-