2.先建立一个点类Point,包含数据成员x,y(坐标点)。以它为基类,派生出圆类Circle,增加数据成员radius(半径),再以Cirlcle类为直接基类,派生出圆柱体类Cylinder,再增加数据成员height(高)。要求: (1)每个类都有构造函数、用于从键盘获取数据的成员函数set(),用于显示数据的成员函数display(),Point的display()为虚函数。 (2)在虚函数输出各类对象信息。
时间: 2024-02-06 12:11:56 浏览: 120
好的,这是一个稍微有点复杂的面向对象编程的问题,我会根据你的要求来回答。
首先,我们需要定义一个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 << ")" << endl;
}
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 << "圆心坐标为:(" << x << "," << y << ")" << endl;
cout << "圆的半径为:" << radius << endl;
}
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 << "圆柱体的底面信息:" << endl;
Circle::display();
cout << "圆柱体的高为:" << height << endl;
}
void set(int x, int y, int radius, int height) {
Circle::set(x, y, radius);
this->height = height;
}
};
```
以上就是完整的代码实现了。通过这个例子,我们可以看出面向对象编程的一些特点,例如继承、多态等。在虚函数中输出各类对象信息可以更好地展示多态的作用。
阅读全文