(1)声明Point(点)类,由Point类派生出Circle(圆)类,再由Circle类派生出Cylinder(圆柱)类。将类的定义部分分别作为3个头文件。对它们的成员函数的声明部分分别作为3个源文件(.cpp文件),在主函数中用#include命令把它们包含进来。形成一个完整的程序,并上机运行。
时间: 2024-02-28 20:56:06 浏览: 75
定义三个类Point,Circle和Cylinder,Point类为基类,为上述3个类添加计算面积的成员函数Area(),要求函数Area()采用虚函数的形式,并通过基类指针调用虚函数Area()。
5星 · 资源好评率100%
以下是Point类的头文件point.h:
```cpp
#ifndef POINT_H
#define POINT_H
class Point {
public:
Point(int x = 0, int y = 0);
int getX() const;
int getY() const;
void setX(int x);
void setY(int y);
void display() const;
private:
int m_x;
int m_y;
};
#endif
```
以下是Point类的源文件point.cpp:
```cpp
#include "point.h"
#include <iostream>
using namespace std;
Point::Point(int x, int y) : m_x(x), m_y(y) {}
int Point::getX() const {
return m_x;
}
int Point::getY() const {
return m_y;
}
void Point::setX(int x) {
m_x = x;
}
void Point::setY(int y) {
m_y = y;
}
void Point::display() const {
cout << "(" << m_x << ", " << m_y << ")" << endl;
}
```
以下是Circle类的头文件circle.h:
```cpp
#ifndef CIRCLE_H
#define CIRCLE_H
#include "point.h"
class Circle : public Point {
public:
Circle(int x = 0, int y = 0, int r = 0);
int getR() const;
void setR(int r);
double getArea() const;
void display() const;
private:
int m_r;
};
#endif
```
以下是Circle类的源文件circle.cpp:
```cpp
#include "circle.h"
#include <iostream>
using namespace std;
Circle::Circle(int x, int y, int r) : Point(x, y), m_r(r) {}
int Circle::getR() const {
return m_r;
}
void Circle::setR(int r) {
m_r = r;
}
double Circle::getArea() const {
return 3.1415926 * m_r * m_r;
}
void Circle::display() const {
cout << "Center: ";
Point::display();
cout << "Radius: " << m_r << endl;
cout << "Area: " << getArea() << endl;
}
```
以下是Cylinder类的头文件cylinder.h:
```cpp
#ifndef CYLINDER_H
#define CYLINDER_H
#include "circle.h"
class Cylinder : public Circle {
public:
Cylinder(int x = 0, int y = 0, int r = 0, int h = 0);
int getH() const;
void setH(int h);
double getVolume() const;
void display() const;
private:
int m_h;
};
#endif
```
以下是Cylinder类的源文件cylinder.cpp:
```cpp
#include "cylinder.h"
#include <iostream>
using namespace std;
Cylinder::Cylinder(int x, int y, int r, int h) : Circle(x, y, r), m_h(h) {}
int Cylinder::getH() const {
return m_h;
}
void Cylinder::setH(int h) {
m_h = h;
}
double Cylinder::getVolume() const {
return getArea() * m_h;
}
void Cylinder::display() const {
cout << "Center: ";
Point::display();
cout << "Radius: " << getR() << endl;
cout << "Height: " << m_h << endl;
cout << "Volume: " << getVolume() << endl;
}
```
以下是主函数main.cpp:
```cpp
#include "cylinder.h"
#include <iostream>
using namespace std;
int main() {
Cylinder c(1, 2, 3, 4);
c.display();
return 0;
}
```
完整程序的过程如下:
1. 分别创建point.h、point.cpp、circle.h、circle.cpp、cylinder.h、cylinder.cpp和main.cpp文件。
2. 在point.h中定义Point类,包括构造函数、getX()、getY()、setX()、setY()、display()等成员函数。
3. 在point.cpp中实现Point类的成员函数。
4. 在circle.h中定义Circle类,继承自Point类,包括构造函数、getR()、setR()、getArea()、display()等成员函数。
5. 在circle.cpp中实现Circle类的成员函数。
6. 在cylinder.h中定义Cylinder类,继承自Circle类,包括构造函数、getH()、setH()、getVolume()、display()等成员函数。
7. 在cylinder.cpp中实现Cylinder类的成员函数。
8. 在main.cpp中创建Cylinder对象,调用display()函数输出圆柱的信息。
9. 编译并运行程序,观察输出结果。
注意:在头文件中使用了#ifndef、#define和#endif来避免重复包含。在源文件中使用了#include命令来包含头文件。
阅读全文