Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7688391
  • 博文数量: 961
  • 博客积分: 15795
  • 博客等级: 上将
  • 技术积分: 16612
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-07 14:23
文章分类

全部博文(961)

文章存档

2016年(1)

2015年(61)

2014年(41)

2013年(51)

2012年(235)

2011年(391)

2010年(181)

分类: C/C++

2011-08-18 20:49:27

C++测试题

一、单项选择题(12题,每题5分)

 

1.     已定义了一个类A并有语句 A* pa=new A(5);  那么以下说法正确的是
A.
该语句会创建A类的一个对象,并将此对象的地址赋给指针pa;
B.
该语句会创建A类的5个对象,且它们的地址是连续的;
C.
当指针变量pa超出其作用域时,pa和为对象分配的空间都将被自动释放;
D.
A中一定有一个显式定义的构造函数和一个显式定义的虚析构函数;

2.     定义类A的非静态成员函数A& f(A& one)时,需有语句return exp;exp不能是:
A.
A中类型为A的静态数据成员     B. f中用语句 A a = one; 定义的量a
C. one                                         D. *this

3.     在一个类中,下列哪些成员可以是多个?
A.
无参构造函数                     B. 析构函数
C.
原型相同的非静态成员函数         D. 静态成员函数

4.     对于通过公有继承定义的派生类,若其成员函数可以直接访问基类的某个成员,说明该基类成员的访问权限是:

A. 公有或私有      B. 私有      C. 保护或私有      D. 公有或保护

5.       在下列关键字中,不能用来表示继承方式的是:

A. private           B. static      C. public            D. protected

6.       下列有关运算符重载的叙述中,正确的是:
A.
运算符重载是多态的一种表现
B. C++
中可以通过运算符重载创造新的运算符
C. C++
中所有运算符都可以作为非成员函数重载
D.
重载运算符时可以改变其结合性

7.       下列关于类定义的说法中,正确的是:
A.
类定义中包括数据成员与函数成员的声明
B.
类成员的缺省访问权限是保护的
C.
数据成员必须被声明为私有的
D.
成员函数只能在类体外进行定义

8.       建立一个有成员对象的派生类对象时,各构造函数体的执行顺序为:
A.
派生类 成员对象类 基类       B. 成员对象类 基类 派生类
C.
基类 成员对象类 派生类       D. 基类 派生类 成员对象类

9.       C++中解决命名冲突的机制是:
A.
虚基类       B. 虚函数      C. 函数重载       D. 名字空间

10.   任意一个类,析构函数的个数最多是:

A. 不限个数   B. 1        C. 2          D. 3

11.   类定义中,为说明成员的访问权限,private, protected, public 可以出现次数为

A. 次数没有具体限定           B. 每种至多一次

C. public 至少一次              D. 每种至少一次

12.   下面关于访问类A的私有数据成员的说法,错误的是:
A. 类A的友元函数可以访问类A的私有成员。

B. 类A的友元类中的非静态成员函数可以访问类A的私有成员
C. 类A的嵌套类中的非静态成员函数可以访问类A的私有成员

D. 类A中的非静态成员函数可以访问类A的私有成员

 

二、写出下面程序的运行结果(2题,每题10分)

 

1.       #include

class A

{

public:

A( ) { cout<<"<1> A::A( ) "<

virtual ~A( ) { cout<<"<2> A::~A( )"<

virtual void g( ) { cout<<"<3> A::g( )"<

void h( ) { cout<<"<4> A::h( )"<

virtual void f( ) { g( ); h( ); }

};

class B:public A

{

public:   

B( ) {cout<<"<5> B::B( ) "<

virtual ~B( ) {cout<<"<6> B::~B( )"<

virtual void g( ) {cout<<"<7> B::g( )"<

void h( ) {cout<<"<8> B::h( )"<

virtual void k( ) { f( ); g( ); h( ); }

};

void main( )

{

B b;

b.k( );

}

2.       #include

class A

{

public:

A( ) {cout<<1<

virtual ~A( ) {cout<<2<

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 A

{

public:

C(A& obj,int n) : a(obj), num(n) { cout<<3<

virtual ~C( ) { cout<<4<

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<

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!

Hello

Hello 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类的定义和实现。

 C++测试题.rar   

阅读(4012) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~