面向对象程序设计模拟试卷 联系客服

发布时间 : 星期二 文章面向对象程序设计模拟试卷更新完毕开始阅读25d03e350912a216147929ba

面向对象程序设计模拟试卷一答案

一解:1. A 2. D 3. C 4. B 5. C 二解:各类的成员及其存取属性如下。

2.priv ate: 1.private: int a; protected: int b; public: int c; int d;protec ted: int e; int b; public: int c; int f; 3.private: int g; int b; int c; protected: int h; public: int i; 4.private: int n, j; int e, c; int f, h; int i; protected: int b; int k;

三解:main中每行的输出结果见如下注释。

A a; cout<<'\\n'; //输出A B b; cout<<'\\n'; //输出B C c; cout<<'\\n'; //输出AC D d; cout<<'\\n'; //输出BACD E e; cout<<'\\n'; //输出AACE F f; cout<<'\\n'; //输出BACACDAACEF 四解:错误及其原因见注释。

class A{

static int a=0;

//不能在类的体内初始化

protected: int b; public: int c; A(int);

operator int( ); } a(1, 2); class B: A{ B(int);

virtual int d;

//没有定义A(int, int)

//virtual不能用于数据成员

int e; public: A::b; //修改而不是恢复访问权限

friend int operator =(B); //不存在普通赋值函数的重载,=必须重载为双目的

static B(int, int); } b=5;

//构造函数不能定义为不带this参数的静态函数成员 //B(int)是不可访问的私有构造函数

class C: B{ public:

int operator++(double); //必须用int定义后置运算

}; //C必须定义构造函数,因B定义有带参构造函数且没有无参构造函数 int main( ){

int *A::*p, i; i=a.a; i=A(4); i=b.c; p=&A::c; i=b; return ;

//a.a是私有的,不能被不是A的友元的main访问 //b.c是私有的,不能被不是B的友元的main访问 //A::c不是一个int *指针

//B不存在公有的B::operator int( )或B::operator A( ) //返回void类型,与main声明的返回类型不一致

}

五解:变量i在每条赋值语句执行后的值见注解。

z=b.x; //i=4 i=a.x; //i=4 i=c.*p; //i=35 i=a++; //i=1 i=::x+c.y; //i=37 i=a+b; //i=-31

//A(4,3)++将A::x=a.x=b.x=c.x置为4, 普通成员a.y=4不变

b.h(i)=7; //i=7

六解:本题所涉及的概念并不复杂,值得注意的是分数的约分运算,该运算实际上是一个单

目运算。在重载约分运算时,要选择只有一个操作数的运算符。另外,在对分数进行加和乘以后,最好对运算结果进行约分运算,如果不约分不算错。函数成员如下。

FRACTION::FRACTION(int num, int den){ numerator=num; denominator=den; }

int FRACTION::operator>(const FRACTION&f)const{ double d= denominator *f.denominator;

return (numerator*f.denominator/d >denominator*f.numerator/d); }

FRACTION FRACTION::operator*( )const{ int c=cmd(numerator, denominator);

return FRACTION(numerator/c, denominator/c); }

FRACTION FRACTION::operator+(const FRACTION&f)const{ int n= numerator*f.denominator+denominator*f.numerator; int d= denominator*f.denominator;

return *FRACTION(n, d); //对运算结果进行约分运算 }

FRACTION FRACTION::operator*(const FRACTION&f)const{

return *FRACTION(numerator*f.numerator, denominator*f.denominator); //约分 }

面向对象程序设计模拟试卷二答案

一解:单项选择题答案 1. B 2. B 3. C 6. D 7. C 8. C 二解:多项选择题答案 11.BCD 12.ABD 三解:填空题答案

16. a.a 17. a.b 18. a.c 19. b.d

20. b.b, b.e

21. c.h 22. c.c

23. d.b, d.e, d.h

24. d.B::c, d.f, d.C::c, d.j 25. d.C::c

四解:名词解释答案

26.标识符:标识符是程序变量、常量、函数和类型的名字,通常是由字母或下划线开

始的字母、数字或下划线等符号序列构成。(要点:仅回答名字或构成得2分,全答得3分)

27.重载:重载是指用一个标识符或操作符命名多个函数,用于完成多个不同类型的操

作。(要点:没有回答多个扣1分,没有回答操作符可不扣分)

28.异常:异常是指函数执行出现了不正常的现象、或运行结果出现了无法定义的情况

而必须中断程序执行的状态。(要点:未回答不正(平)常、结果无法定义或中断执行,可扣1分)

29.类型强制:类型强制是指将一种类型映射或转换为另一种类型。(要点:没有映射

或转换扣1分,没有涉及两种类型扣1分)

30.抽象类:抽象类是指定义了纯虚函数、或继承了纯虚函数但没有定义函数体的类。

或者抽象类是不能定义或产生实例对象的类。(要点:或者前后的两种回答都可以得分)

五解:判断改错题答案

31.√

32.X 改正:AC 33. √ 34. √

35. X 改正:BACACDAACEF 六解:计算题答案

36. i=4 37. i=4 38. i=35 39. i=7 40. i=37 41. i=47 42. i=7 七解:设计题答案要点如下,达不到要求各扣1分。

①所有函数头必须包含COMPLEX::

②构造函数定义时不能再次定义缺省参数

4. C 9. D

5. D 10.B

14.BC

15.AB

13.ABC

③返回类型为COMPLEX&的&不能省略

④返回类型为COMPLEX&的必须用return *this

⑤返回类型为COMPLEX的必须定义局部对象或使用常量对象

⑥const不能漏掉,凡尾部部带const的函数不能改变当前对象的值。 43. 五个成员函数如下。

COMPLEX::COMPLEX(double r, double i){ real=r; imag=i; } COMPLEX& COMPLEX::operator += (const COMPLEX &c){ real+=c.real; imag+=c.imag; return *this; }

COMPLEX& COMPLEX::operator ++ ( ){//前置运算,先运算后取值 real++; imag++; return *this; }

COMPLEX COMPLEX::operator - ( ) const{ return COMPLEX(-real, -imag); } COMPLEX COMPLEX::operator + (const COMPLEX &c) const { return COMPLEX(real+c.real, imag+c.imag); }