面向对象技术与C++(3)答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《面向对象技术与C++》试卷答案(3)

第一题填充题(10分,每1个空格1分)

1.当使用带参数的流操纵算子时,程序中必须包含(iomanip)头文件。

2.复合对象中的成员对象是在建立复合对象之(前)建立的。

3.运算符new分配的动态内存要用运算符(delete) 回收。如果在一个类的构造函数中使

用new分配动态内存,则回收操作应在类的(析构)函数中完成。

4.struct成员的默认访问模式是(public),而class成员的默认访问模式是 (private)。

5.关键字(const) 指定了不可修改的对象或变量。关键字(const) 指定一个类的成员不会

修改类中的数据成员。

6.重载赋值运算符operator= 时,应将其声明为类的(成员)函数。

7.C++中的输入/输出是以字节(流) 的形式实现的。

第二题指出下列程序段中的错误,说明错误原因(10分,每1小题5分)1.class Rational { //表示有理数的类声明

public:

void Rational (int,int); //第1个参数为分子,第2个参数为分母

// 其他成员函数的原型说明

private:

void Rational ( ); //默认的数为0,其分子表示为0,分母表示为1

int a = 0 , b = 1;

}

1) void Rational(); 构造函数的访问属性应为public

2) 两个构造函数都不能指定返回类型

3)int a = 0 , b = 1; 不能直接赋初值

4)最后少了一个分号(;)

2.class myClass {

public:

myClass(char a, int b) { v = a ; si = b ; }

void f1(int i = 10) const { v = v + i ; }

static int f2() { return v + si; }

private:

char v;

static int si;

} ;

1) static函数f2()不能访问非static成员v

2) 构造函数中不能对static数据赋值

3) const成员函数f1不能修改数据成员v

4) static数据si需要在类声明的外面进行初始化

第三题选择题 (10分,每1个空格1分)

1.在VC++中,目标文件的扩展名为(B)

[A] .cpp

[B] .obj

[C] .h

[D] .exe

2.通常情况下,模板函数的类型参数个数不能为(A)个。

[A] 0

[B] 1

[C] 2

[D] 2个以上

3.既要禁止修改指针p,又要禁止修改p所指的数据,则p的正确定义是(D)。

[A] const char* p=”xxxx”;

[B] char* const p=”xxxx”;

[C] char const *p=”xxxx”;

[D] const char * const p=”xxxx”;

4.若函数f是类C中的虚函数,类D是类C的公有派生类,则函数f在类D中是(A)。

[A] 总是虚函数

[B] 只有重新声明时才是虚函数

[C] 只有使用virtual关键字重新声明时才是虚函数

[D] 不可能是虚函数

5. 每个类(A)析构函数。

[A] 只能有一个

[B] 只可有私有的

[C] 可以有多个

[D] 只可有缺省的

6. 重载函数调用运算符operator[ ]时,应将其声明为类的(C)函数。

[A] 非成员

[B] 虚

[C] 成员

[D] 多态

7. static成员函数没有(B)。

[A] 返回值

[B] this指针

[C] 指针参数

[D] 返回类型

8. 设T是类名,则声明T a(); 表示a是(A)。

[A] 函数名

[B] 对象名

[C] 函数指针

[D] 引用

8. 设函数f是类A的虚函数,类B是类A的public派生类。

定义B d; A* p=&d; A& r=d; 则采用动态联编的是(B)和(E)。

[A] d.f();

[B] p->f();

[C] p.f();

[D] r->f();

[E] r.f();

第四题简答题(10分)

为什么编译器认为把基类指针转换为派生类指针是危险的?

派生类指针指向基类对象。这种方法是不安全的,因而需要避免。因为通过派生类指针使用派生类自己添加的成员是可以的,但它所指的基类对象中并不存在这种成员。

第五题写出以下程序运行时的输出结果(10分)

#include

using namespace std;

class A {

public:

A() { cout << "initialize A\n"; }

virtual void write() { cout << "class A \n"; }

};

class B: public A {

public:

B() { cout << "initialize B\n"; }

void write() { cout << "class B \n"; }

};

class C: public B {

public:

C() { cout << "initialize C\n"; }

void write() { cout << "class C\n"; }

};

class D: public C {

public:

相关文档
最新文档