2010C++作业习题和答案

  • 格式:doc
  • 大小:73.00 KB
  • 文档页数:8

1 / 8 《C++程序设计》作业习题和答案

第一部分(第1-7、8、9章)

一、单选题

1、在C++中,关于下列设置缺省参数值的描述中,( B )是正确的。

A.不允许设置缺省参数值;

B.在指定了缺省值的参数右边,不能出现没有指定缺省值的参数;

C.只能在函数的定义中指定参数的缺省值;

D.设置缺省参数值时,必须全部都设置;

2、关于友元函数的描述中,错误的是( B )。

A.友元函数说明在类体内 B.友元函数必须用对象来引用

C.友元函数不是成员函数 D.友元函数可以直接访问类中的私有成员

3、下列关于构造函数的特征的描述中,正确的是( B )。

A. 不可以重载 B. 不说明其类型

C. 与类名不同 D. 不可以设置默认参数

4、下列关键字中,( B )不是类定义中使用的关键字。

A. class B. switch C. public D. private

5、可能具有类型转换功能的构造函数应该是( B )

A. 不带参数的构造函数

B. 带一个参数的构造函数

C. 带两个参数的构造函数

D. 默认构造函数

6、下列关于new运算符的描述中,错误的是( C )。

A. new运算符组成的表达式的值是地址值

B. 用它创建的对象须用delete来删除

C. 创建对象时不调用构造函数

D.可用它来创建动态的对象和对象数组

7、下面选项中,不是类的成员函数为( C )

A. 构造函数

B. 析构造函数

C. 友元函数

D. 缺省参数的构造函数

8、在类定义的外部,可以被访问的成员有( C )。

A. 所有类成员 B.private或protected的类成员

C. public的类成员 D. public 或private的类成员

9、关于静态成员的描述中,( C )是错误的。

A. 静态成员可分为静态数据成员和静态成员函数

B. 静态数据成员初始化不使用其构造函数

C. 静态数据成员定义后必须在类体内进行初始化

D. 静态成员函数中不能直接引用非静态成员

10、下列关于对象引用的描述中,错误的是( C )。

A.对象引用不能作数组元素

B.对象引用可作为函数的参数和返回值

C.定义对象引用时需用同类对象的地址值进行初始化

D.对象引用成员表示与对象相同

二、判断题

1. ∨ 构造函数和析构函数都是系统自动调用的。

2. ∨ 运算符new可以创建变量或对象, 也可以创建数组。

3. ╳ 构造函数和析构函数都可以重载,因为它们都是成员函数。

4. ╳ 友元函数是成员函数,它可以访问类中私有成员。

5. ╳ 子对象的初始化可以不放在该类的构造函数中。 2 / 8 6. ╳ 假定AB为一个类,则执行“AB a[10];”语句时,系统自动调用该类的构造函数的次数为1次。

7. ∨ 类的构造函数具有与其类名相同的名字。

8. ∨ 对象数组的元素必须是同一个类的对象。

9. ╳ 用class定义的类中,默认的访问权限是公有的。

10. ╳ 如果一个类中没有定义任何构造函数,则该类的对象便无法初始化。

三、写出下列程序的输出结果:

1、

#include

#include

class A

{

public:

A(int i=0)

{ a=i+b; }

void Print();

~A()

{ cout<<"Destructor\n"; }

private:

int a;

static int b;

};

void A::Print()

{ cout<<'('<

int A::b=5;

void main()

{

A array[3];

array[0]=A(1);

array[1]=A(3);

A *parr[3];

for(int i=0;i<3;i++)

parr[i]=&array[i];

for(i=0;i<3;i++)

parr[i]->Print();

}

Destructor

Destructor

(6,5)

(8,5)

(5,5)

Destructor

Destructor

Destructor

2、

#include

class Student

{

public:

Student(int i=0,double j=0) 3 / 8 { num=i;score=j; }

void print()

{ cout<

friend void fun(Student &rs);

private:

int num;

double score;

};

void fun(Student &rs)

{ rs.num=1100;

rs.score=80;

rs.print();

}

void main()

{ Student s1(1000,90),s2;

s1.print();

fun(s2);

}

1000,90

1100,80

3、

#include

class Tdate

{ public:

Tdate(int i=2002,int j=11,int k=15);

void Print();

~Tdate()

{ cout<<“Destructor”<

private:

int year,month,day;

};

Tdate::Tdate(int i,int j,int k)

{ year=i;

month=j;

day=k;

cout<<“Cosntructor”<

}

void Tdate::Print()

{ cout<

}

void main()

{ Tdate d1(2008,2,1);

d1.Print();

Tdate d2(d1);

d2.Print();

}

Constructor 1

2008/2/1

2008/2/1 4 / 8 Destructor 1

Destructor 1

4、

#include

class A

{

public:

A(int i=0)

{m=i; cout<<”Constructor called.”<

void Set(int i)

{m=i;}

void Print() const

{cout<

~A()

{cout<<”Destructor called.”<

private:

int m;

}

void main()

{

const int N=5;

A my;

my=N;

my.Print();

}

Constructor called.0

Constructor called.5

Destructor called.5

5

Destructor called.5

第二部分(第10、11、13章)

一、单选题

1、下列对派生类的描述中,( A )是错误的。

A. 基类中成员访问权限继承到派生类中都保持不变。

B. 派生类至少应有一个基类。

C. 一个派生类可以作为另一个派生类的基类。

D. 派生类的成员除了自己定义的成员外,还包含了它的基类成员。

2、假定要对类AB定义加号操作符重载成员函数,实现两个AB类对象的加法,并返回相加结果,则该成员函数的声明语句为( A )。

A. AB operator+(AB & a) B. AB operator+(AB & a , AB & b)

C. operator+(AB a) D. AB & operator+( )

3、派生类的对象对它的哪一类基类成员是可以访问的( A )

A. 公有继承的基类的公有成员

B. 公有继承的基类的保护成员

C. 公有继承的基类的私有成员

D. 保护继承的基类的公有成员

4、下列对运算符重载的描述中,正确的是( D )。

A. 运算符重载可以改变结合性

B. 运算符重载可以改变优先级 5 / 8 C. 运算符重载可以改变操作数的个数

D. 运算符重载不改变优先级和结合性

5、下列函数中,( D )不能重载。

A. 成员函数 B. 非成员函数 C. 构造函数 D. 析构函数

6、关于动态联编的下列描述中,( A )是错误的。

A.动态联编是在编译时确定操作函数的

B.动态联编是以虚函数为基础的

C.动态联编是在继承的前提下的一种多态性

D.动态联编时要求类的继承是公有的

7、关于纯虚函数和抽象类的描述中,错误的是( A )。

A. 抽象类的派生类一定不会再有纯虚函数。

B. 抽象类中一定具有至少有一个纯虚函数。

C. 纯虚函数没有具体实现。

D. 抽象类一般作为基类使用,其纯虚函数的实现由其派生类给出。

8、在下列打开磁盘文件的访问方式常量中,以读方式打开文件时应选用( A )。

A. in B. out C. ate D. app

9、在创建派生类对象时,构造函数的执行顺序是( D )。

A. 对象成员构造函数、基类造函数、派生类本身的构造函数。

B. 派生类本身的构造函数、基类造函数、对象成员构造函数。

C. 基类造函数、派生类本身的构造函数、对象成员构造函数。

D. 基类造函数、对象成员构造函数、派生类本身的构造函数。

10、控制输出格式的控制符中,( D )是设置输出宽度的。

A. ws B. ends C. setfill() D. setw()

二、判断题

1.∨ 基类中私有成员派生类不可直接访问。

2.∨ 公有继承方式下,基类中公有成员和保护成员在派生类中仍然是公有的和保护的。

3.∨ 私有继承方式下,基类中公有成员和保护成员在派生类中都是私有的。

4.∨ 派生类的构造函数中显式或隐含的包含着直接基类的构造函数。

5.╳ 派生类的对象不可以给基类对象赋值。

6.╳ 静态联编是在运行时进行的,动态联编是在编译时进行的。

7. ∨ 派生类的构造函数中应包含直接基类的构造函数。

8.∨ 基类中的保护成员在其派生类中可以访问,而派生类对象不可访问。

9.∨ 抽象类不能定义对象,可以定义对象引用和对象指针。

10.∨ 一个对象在创建时,总是要被初始化的。

三、写出下面程序的输出结果。

1、

#include

class A

{

public:

A(int i,int j)

{a=i;b=j;}

void Move(int x,int y)

{a+=x;b+=y;}

void Show()

{cout<<”(”<