请综合运用学过的知识,先建立一个point类,包含函数成员x,y。以它为基类,派生出一个circle类,增加函数成员r,再以circle类,为直接基类,派生一个cylinder类,再增加函数成员h。要求编写程序,重载运算符“《”,使之能用于输出以上类的对象。
时间: 2024-05-01 13:23:19 浏览: 64
下面是对应的程序代码:
```cpp
#include <iostream>
using namespace std;
class Point {
public:
Point(double x = 0.0, double y = 0.0): x(x), y(y) {}
friend ostream& operator<<(ostream& os, const Point& p) {
os << "(" << p.x << "," << p.y << ")";
return os;
}
protected:
double x, y;
};
class Circle : public Point {
public:
Circle(double x = 0.0, double y = 0.0, double r = 0.0): Point(x, y), r(r) {}
friend ostream& operator<<(ostream& os, const Circle& c) {
os << "Center: " << static_cast<Point>(c) << ", Radius: " << c.r;
return os;
}
protected:
double r;
};
class Cylinder : public Circle {
public:
Cylinder(double x = 0.0, double y = 0.0, double r = 0.0, double h = 0.0): Circle(x, y, r), h(h) {}
friend ostream& operator<<(ostream& os, const Cylinder& cy) {
os << "Base: " << static_cast<Circle>(cy) << ", Height: " << cy.h;
return os;
}
protected:
double h;
};
int main() {
Point p(1, 2);
cout << "Point " << p << endl;
Circle c(3, 4, 5);
cout << "Circle " << c << endl;
Cylinder cy(6, 7, 8, 9);
cout << "Cylinder " << cy << endl;
return 0;
}
```
程序中,Point 类包含两个数据成员 x 和 y,构造函数可以接受两个参数,分别表示横纵坐标的初始值。Circle 类继承自 Point 类,增加了一个半径 r 的数据成员,构造函数可以接受三个参数,分别表示圆心的初始坐标和半径的初始值。Cylinder 类继承自 Circle 类,增加了一个高度 h 的数据成员,构造函数可以接受四个参数,分别表示底面圆心的初始坐标、半径的初始值和高度的初始值。在每个类中都重载了输出运算符 “<<”,用于输出对象的信息。在主函数中分别创建了 Point、Circle 和 Cylinder 对象,并输出它们的信息。
程序输出结果为:
```
Point (1,2)
Center: (3,4), Radius: 5
Base: Center: (6,7), Radius: 8, Height: 9
```
可以看到,使用重载的输出运算符 “<<” 可以方便地输出对象的信息。
阅读全文