2002级C++面向对象程序设计试题A-计算机学院2003冬天-参考答案

更新时间:2024-05-29 13:20:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

2002级C++面向对象程序设计试题(A卷)

(满分:100分)

一、单项选择(每题1分,共10分)

1. D 2. D 3. B 4. C 5. C 6. B 7. B 8. A

9. A 答案可能有误,我认为应该是D 10. A

二、

1. 错误, private的成员不能被其派生类的成员函数访问。 2. 正确。

3. 错误,返回值类型不作为依据。

4. 错误,构造函数在私有或保护权限修饰下时是反例。

5. 错误, public继承方式下的基类类型的指针都可以指向其派生类对象。 6. 错误,可通过Base类中访问其x的方法见解访问到。 7. 正确。

8. 错误,继承方式中用virtual 修饰的是。

9. 错误,静态说明的对象初始化时,其构造函数的执行可能有结果输出。 10. 正确,顺序与列表顺序无关。

二、回答下列各题(共20分) 1.

继承方式\\访问权限 Public protected private Public 可访问,相当于public 可访问,相当于protected 可访问,相当于private Protected 可访问,相当于protected 可访问,相当于protected 可访问,相当于private private 不可访问 不可访问 不可访问 2. 不带参数的构造函数、拷贝构造函数、析构函数、赋值运算,还可以有相关的new、delete运算

等。

3. a1与a2的地址值是否相等。

4. 让A与B均从同一个类X派生,元素类型是X*或X&的树组可存放A及B的对象地址或引用。 5. 只能为成员函数的,如:赋值运算;只能为全局函数的,如:插入运算符<<;均可的,如:+运

算。

6. (1)基类中无不带参数的构造函数;(2)类中有常量成员;(3)类中有引用成员。

四、

(1) Derived& operator=(const Derived& aD)

{

Base::operator=(aD); y = aD.y; return *this;

}

(2) Derived(const Derived& aD)

{

operator=(aD); }

(3) const修饰符的作用是使实际参数既可以是变量,又可以是常量。使用引用的目的是避免拷贝,

避免无限递归循环调用。

(4) 有指针或引用类型的数据成员时。

五、 B::f B A D D::f ~D ~A ~B 六、

Number=3,7,10 Number=14,9,1 Sum=54 Sum=54

七、考查以虚函数形式定义的运算符重载,各类中实现相似,略。 class A { private: int va; public: A(int n):va(n) {} virtual int get_va(){return va;} virtual int get_vb(){return 0;} virtual int get_vc(){return 0;} virtual A& operator+(A& obj){va+=obj.get_va();return *this;}

void printf(){cout << get_va() <<','<

class B: public A { private: int vb; public: B(int n1,int n2):A(n1),vb(n2){} virtual int get_vb(){return vb;} virtual A& operator+(A& obj){ A::operator+(obj); vb+=obj.get_vb();return *this;} };

class C: public B { private: int vc; public: C(int n1,int n2,int n3):B(n1,n2),vc(n3){} virtual int get_vc(){return vc;} virtual A& operator+(A& obj){B::operator+(obj);vc+=obj.get_vc();return *this;} }; 八、

class D: public B1

{ public:

D(const &B2 aB2): m_B2(aB2); void func( ) const { f( ); m_b2.g( ); } private:

const B2& m_B2;

}; 九、

class Pair

{ public:

Pair(L*, R*);

R* getR( ) { reuturn aR; } L* getL( ) { return aL;} private:

R* aR; L* aL; };

class Dictionary {

public:

Dictionary( ) { lines=0; } void addARow(Pair * aPair)

{ //先查是否有重复的,代码类似下面getRBy,代码略 Rows[lines++] = aPair }

R* getRBy(L* aL)

{ R* pR;

int found = 0; int i = 0; while (!found)

{ if ( i >= line) break;

if (rows[i]->getL( ) == aL)

//或者if(rows[i]->getL( )->getVal( ) == aL->getVal( )

{ found = 1; pR = new R(*(rows[i]->getR( ))); } else i++;

}

if (found)

return pR;

else

return 0;

}

L* getLBy(R* aR){ 代码与上类似,略}

private:

Pair* Rows[200]; int lines;

};

本文来源:https://www.bwwdw.com/article/dqy6.html

Top