先建立一个点类point,包含数据成员x,y(坐标点)。以它为基类,派生出圆类circle,增加数据成员radius(半径),再以cirlcle类为直接基类,派生出圆柱体类cylinder,再增加数据
时间: 2023-05-02 18:00:59 浏览: 783
题目中先建立一个点类 Point,包含数据成员 x, y(坐标点)。以它为基类,派生出圆类 Circle,增加数据成员 radius(半径),再以 Circle 类为基类,派生出圆柱体类 Cylinder,增加数据成员 height(高),再增加数据成员 volume(体积)。
相关问题
2.先建立一个点类Point,包含数据成员x,y(坐标点)。以它为基类,派生出圆类Circle,增加数据成员radius(半径),再以Cirlcle类为直接基类,派生出圆柱体类Cylinder,再增加数据成员height(高)。要求: (1)每个类都有构造函数、用于从键盘获取数据的成员函数set(),用于显示数据的成员函数display(),Point的display()为虚函数。
好的,这是一个面向对象编程的问题,我会根据你的要求来回答。
首先,我们需要定义一个Point类,包含数据成员x和y,以及构造函数、set()函数和虚函数display()。代码如下:
```C++
class Point {
protected:
int x;
int y;
public:
Point(int x = 0, int y = 0) {
this->x = x;
this->y = y;
}
virtual void display() {
cout << "(" << x << "," << y << ")";
}
void set(int x, int y) {
this->x = x;
this->y = y;
}
};
```
然后,我们需要派生出一个Circle类,增加数据成员radius,并且重写父类的set()和display()函数。代码如下:
```C++
class Circle : public Point {
protected:
int radius;
public:
Circle(int x = 0, int y = 0, int radius = 0) : Point(x, y) {
this->radius = radius;
}
void display() {
cout << "圆心坐标:";
Point::display();
cout << ",半径:" << radius;
}
void set(int x, int y, int radius) {
Point::set(x, y);
this->radius = radius;
}
};
```
最后,我们再以Circle类为直接基类,派生出一个Cylinder类,增加数据成员height,并且重写父类的set()和display()函数。代码如下:
```C++
class Cylinder : public Circle {
protected:
int height;
public:
Cylinder(int x = 0, int y = 0, int radius = 0, int height = 0) : Circle(x, y, radius) {
this->height = height;
}
void display() {
cout << "圆心坐标:";
Point::display();
cout << ",半径:" << radius << ",高:" << height;
}
void set(int x, int y, int radius, int height) {
Circle::set(x, y, radius);
this->height = height;
}
};
```
以上就是完整的代码实现了。通过这个例子,我们可以看出面向对象编程的一些特点,例如继承、多态等。
2.先建立一个Point(点)类,包含数据成员x,y(坐标点)。以它为基类,派生出一个Circle(圆)类,增加数据成员r(半径),再以Circle类为直接基类,派生出一个Cylinder(圆柱体)类,在增加数据成员h(高)。要求编写程序,重载运算符“<<”和“>>”,求解圆的面积和圆柱体
的体积,同时能够输入和输出圆和圆柱体对象的信息。
以下是基于您的要求编写的代码:
```c++
#include <iostream>
using namespace std;
const double PI = 3.14159265358979323846;
class Point {
public:
Point(double xx = 0, double yy = 0) : x(xx), y(yy) {}
friend istream& operator>>(istream& is, Point& p);
friend ostream& operator<<(ostream& os, const Point& p);
protected:
double x, y;
};
istream& operator>>(istream& is, Point& p) {
is >> p.x >> p.y;
return is;
}
ostream& operator<<(ostream& os, const Point& p) {
os << "(" << p.x << ", " << p.y << ")";
return os;
}
class Circle : public Point {
public:
Circle(double xx = 0, double yy = 0, double rr = 0) : Point(xx, yy), r(rr) {}
double area() const { return PI * r * r; }
friend istream& operator>>(istream& is, Circle& c);
friend ostream& operator<<(ostream& os, const Circle& c);
protected:
double r;
};
istream& operator>>(istream& is, Circle& c) {
is >> static_cast<Point&>(c) >> c.r;
return is;
}
ostream& operator<<(ostream& os, const Circle& c) {
os << "Center: " << static_cast<const Point&>(c) << ", Radius: " << c.r;
return os;
}
class Cylinder : public Circle {
public:
Cylinder(double xx = 0, double yy = 0, double rr = 0, double hh = 0) : Circle(xx, yy, rr), h(hh) {}
double volume() const { return Circle::area() * h; }
friend istream& operator>>(istream& is, Cylinder& cy);
friend ostream& operator<<(ostream& os, const Cylinder& cy);
protected:
double h;
};
istream& operator>>(istream& is, Cylinder& cy) {
is >> static_cast<Circle&>(cy) >> cy.h;
return is;
}
ostream& operator<<(ostream& os, const Cylinder& cy) {
os << "Base: " << static_cast<const Circle&>(cy) << ", Height: " << cy.h;
return os;
}
int main() {
Circle c(0, 0, 1);
cout << "Input circle info: ";
cin >> c;
cout << c << endl;
cout << "Circle area: " << c.area() << endl;
Cylinder cy(0, 0, 1, 2);
cout << "Input cylinder info: ";
cin >> cy;
cout << cy << endl;
cout << "Cylinder volume: " << cy.volume() << endl;
return 0;
}
```
在上面的代码中,Point类表示一个点,包含x和y坐标;Circle类继承自Point类,并增加了一个r成员表示半径,同时提供了计算面积的方法area();Cylinder类继承自Circle类,并增加了一个h成员表示高,同时提供了计算体积的方法volume()。重载运算符“<<”和“>>”用于输入和输出对象信息。在main函数中,先创建一个Circle对象和一个Cylinder对象,然后输入它们的信息并计算面积和体积,最后输出结果。
阅读全文