《面向对象程序设计C++》期末试卷及标准答案(A) 下载本文

B b; };

int main ( ) {

C obj; return 0; } 3、

#include using namespace std; class A {public:

A(){cout<<\

virtual ~A(){cout<<\};

class B: public A {public:

B(int i)

{ cout<<\ }

virtual ~B() { } private:

char *buf; };

int main()

{ A *a=new B(15);

delete a; return 0; } 4、

#include using namespace std;

buf=new char[i];

delete []buf;

cout<<\

第 5 页

class A {public: }; class B {public: };

class C: public A, public B {public: };

int main() { }

四、编程题(27分)

1、(10分) 已知复数类Complex的声明如下: class Complex {public:

Complex(); //无参构造函数 Complex(double ); //转换构造函数

Complex(double, double); //有两个形参的构造函数

friend Complex operator+(Complex&, Complex&); //对“+”运算符进行重载

friend ostream& operator<<(ostream&, Complex&); //对“<<”运算符进行重载

friend istream& operator>>(istream&, Complex&); //对“>>”运算符进行重载 private:

void f(){cout<<\

void f() {cout<<\

void g() {cout<<\

void g(){cout<<\

C cc; cc.B::f(); cc.g(); return 0;

cc.B::g();

第 6 页

double real,imag; };

要求:(1)写出该类的所有构造函数的类外定义代码。

(2)写出对运算符“+”、“<<”、“>>”进行重载的运算符重载函数的定义。 2、(17分)下列Shape类是一个表示形状的抽象类,area( )为求图形面积的函数,total( )则是一个通用的用以求不同形状的图形面积总和的函数。 class Shape {public: };

double total(Shape *s[ ], int n) { double sum=0.0; for(int i=0; i

要求:(1)从Shape类派生圆类(Circle)、正方形类(Square),圆类新增数据成员半径(radius),正方形类新增数据成员边长(a),圆类和正方形类都有构造函数,修改、显示数据成员值的函数,求面积函数。

(2)写出main()函数,计算半径为5.5的圆和边长为9.9的正方形的面积和(必须通过调用total函数计算)。

return sum;

sum+=s[i]->area( );

virtual double area()=0;

第 7 页

《面向对象程序设计C++》期末考试试卷(A)标准答案

班级: 姓名: 学号: 分数: 题号 得分 一 二 三 四 总分 一、单项选择题(每小题2分,共40分)

1-5.C D B C C 6-10.A A D D B 11-15.A B B B C 16-20.D C B C C

二、填空题(前14个空,每空1分,后3个空,每空2分,共20分) 1. 抽象 实例 2. this指针 3. E D、F A、B、C、D、E D、F 4. virtual 5. 静态多态性 动态多态性 6. 抽象类 7. friend void fun(A &a) 8. 继承 组合或模板

9. 在对象被系统释放之前做一些内存清理工作 10. A(const A&) 11. A operator++(int) 三、阅读程序(13分) 1、a=89,b=56,c=12 2、ABC 3、A::A() called. B::B() called. B::~B() called.

A::~A() called. 4、Call B's function f() Call B's function g() Call C's function g() 四、编程题(共27分) 1、(10分)

Complex::Complex(){real=0;imag=0;} Complex::Complex(double r){real=r;}

Complex::Complex(double r,double i){real=r;imag=i;} Complex operator+(Complex &c1,Complex &c2) { Complex c;

c.real=c1.real+c2.real; c.imag=c1.imag+c2.imag;

第 8 页