面向对象技术与方法考试试卷:编程题解析

需积分: 0 0 下载量 171 浏览量 更新于2024-08-04 收藏 57KB DOC 举报
"该文档是2020年北京理工大学面向对象技术与方法课程的一份考试试卷,包含两道编程题。要求学生根据题目描述设计并实现类,同时提供设计思路、源代码以及运行结果的截图。" 第一题(20分) 题目要求定义一个名为`Complex`的复数类,包含两个数据成员`real`(实部)和`image`(虚部)。需要设计合适的构造函数和其他必要的函数。在`main()`函数的示例中,展示了复数类对象的创建、赋值和加法操作,并给出了相应的输出。 设计思想: 1. 创建一个名为`Complex`的类,包含`real`和`image`两个私有数据成员,用于存储复数的实部和虚部。 2. 实现默认构造函数,初始化复数为0。 3. 实现带有两个参数的构造函数,用于直接指定复数的实部和虚部。 4. 重载赋值运算符`=`,以支持复数之间的赋值。 5. 重载加法运算符`+`,实现复数的相加。 6. 为了显示复数,需要重载`<<`运算符,使得可以将`Complex`对象直接输出到控制台。 源代码(示例): ```cpp #include <iostream> using namespace std; class Complex { private: double real; double image; public: // 默认构造函数 Complex() : real(0), image(0) {} // 带参数的构造函数 Complex(double r, double i) : real(r), image(i) {} // 重载赋值运算符 Complex& operator=(const Complex& other) { real = other.real; image = other.image; return *this; } // 重载加法运算符 Complex operator+(const Complex& other) const { return Complex(real + other.real, image + other.image); } // 重载输出流运算符 friend ostream& operator<<(ostream& os, const Complex& c) { os << c.real << '+' << c.image << "i"; return os; } }; int main() { Complex C1(1, 2), C2; Complex C3 = C2; cout << "C3=" << C3 << endl; C2 = C1 + C3; cout << "C2=" << C2 << endl; C2 += C1; cout << "C2=" << C2 << endl; return 0; } ``` 运行结果的截屏(假设): ``` C3=0+0i C2=1+2i C2=2+4i ``` 第二题(20分) 本题要求定义一个抽象基类`Shape`,它有一个纯虚函数`Area()`,表示形状的面积。另外,需要创建两个派生类:`Circle`(圆形)和`Triangle`(三角形),分别计算圆的面积和三角形的面积。 设计思路: 1. 定义一个抽象类`Shape`,包含一个纯虚函数`Area()`,用于计算形状的面积。 2. `Circle`类继承自`Shape`,添加一个数据成员`Radius`表示圆的半径,并实现`Area()`函数计算圆的面积。 3. `Triangle`类同样继承自`Shape`,包含两个数据成员`Bottom-length`(底边长度)和`Height`(高),并实现`Area()`函数计算三角形的面积。 源代码(示例): ```cpp #include <iostream> using namespace std; class Shape { public: virtual double Area() const = 0; // 纯虚函数,计算形状的面积 }; class Circle : public Shape { private: double radius; public: Circle(double r) : radius(r) {} double Area() const override { return 3.14159 * radius * radius; } }; class Triangle : public Shape { private: double bottomLength; double height; public: Triangle(double b, double h) : bottomLength(b), height(h) {} double Area() const override { return 0.5 * bottomLength * height; } }; int main() { Shape* shapes[2]; shapes[0] = new Circle(5); shapes[1] = new Triangle(6, 4); for (int i = 0; i < 2; ++i) { cout << "Shape " << i + 1 << " area: " << shapes[i]->Area() << endl; } delete shapes[0]; delete shapes[1]; return 0; } ``` 运行结果的截屏(假设): ``` Shape 1 area: 78.53975 Shape 2 area: 12.0 ``` 以上两题的解答覆盖了面向对象编程的基础概念,包括类的定义、数据成员、构造函数、赋值运算符的重载、成员函数和非成员函数、运算符重载、抽象类和派生类、虚函数等知识点。