C++ Point 类和 Circle 类结构详解:实现坐标点和圆形对象
C++ Point 类和 Circle 类结构详解
本教程将深入解析 C++ 中的 Point 类和 Circle 类,涵盖构造函数、坐标设置、数据成员、重载运算符等关键内容,并提供详细代码示例。
Point 类结构说明
Point 类表示二维平面上的一个点,其数据成员包括:
- 私有数据成员:
x(double 型):X 坐标。y(double 型):Y 坐标。
Point 类的成员函数包括:
- 有参构造函数:
Point(double, double),其中参数分别为 X 坐标和 Y 坐标,默认值均为 0。 - 公有函数成员:
void setX(double):设置 X 坐标。double getX() const:返回 X 坐标。void setY(double):设置 Y 坐标。double getY() const:返回 Y 坐标。
- 重载运算符:
<<:实现 Point 对象的格式输出,输出格式要求为:
例如:(<X坐标>,<Y坐标>)(1.0,2.0)等。>>:实现 Point 对象的格式输入,输入格式要求为:
例如:(<X坐标>,<Y坐标>)(1.0,2.0)等。
Plane 类结构说明
Plane 类是平面图形的抽象基类,其成员函数包括:
- 纯虚函数:
virtual double length() const:用于计算平面图形的周长。virtual double area() const:用于计算平面图形的面积。
Circle 类结构说明
Circle 类表示一个圆形,公有派生自 Point 类和 Plane 类,其结构说明如下:
-
数据成员:
- 圆心坐标: 继承自 Point 类。
- 保护静态数据常量:
PI(double 型),其值为 3.14159。 - 私有数据成员:
radius(double 型):半径。
-
成员函数:
- 有参构造函数:
Circle(double, double, double),其中函数参数包括圆心坐标和半径,圆心调用 Point 类构造函数进行构造,各参数默认值为 0。 - 公有函数成员:
void setR(double):设置 radius。double getR() const:返回 radius。
- 重载函数:
double area() const:计算圆的面积。double length() const:计算圆的周长。
- 重载运算符:
<<:实现 Circle 对象的格式输出,输出格式要求为:
例如:((<X坐标>,<Y坐标>),<半径>)((1.0,2.0),3.0)等。>>:实现 Circle 对象的格式输入,输入格式要求为:
例如:((<X坐标>,<Y坐标>),<半径>)((1.0,2.0),3.0)等。
- 有参构造函数:
main(void) 说明
main(void) 函数的操作顺序描述如下:
- 读入 Point 对象: 已输入的
d1、d2来构造 Point 对象p,并将p用<<写入文本文件s3.txt中。 - 从文本文件读入 Point 对象: 将文本文件
s3.txt打开,应用>>操作将里面的数据读入到 Point 对象p中。 - 构造 Circle 对象: 利用 Point 对象
p的数据设置 Circle 对象c,设置要求:- 将
c的圆心 X 坐标设置为p的 Y 坐标。 - 将
c的圆心 Y 坐标设置为p的 X 坐标。 - 将
c的半径设置为p的 Y 坐标与 X 坐标的和。 并将设置好的c写入二进制文件b3.dat中。
- 将
- 从二进制文件读入 Circle 对象: 将二进制文件
b3.dat打开,将里面的数据读入到 Circle 对象c中。 - 调用计算函数: 最后以
c对象为参数调用f函数(假设f函数用于计算圆的面积或周长)。
输入样例:
1.0 2.1
输出样例:
30.1907
19.4779
分析
-
Point 类的实现比较简单,只需要实现构造函数和设置、获取坐标的函数即可。重载输入输出运算符也比较简单,只需要按照格式读入或输出即可。
-
对于 Circle 类,需要实现构造函数、获取和设置半径的函数、面积和周长的计算函数。由于圆心坐标继承自 Point 类,因此可以直接使用 Point 类的函数进行操作。在圆的面积和周长的计算函数中,需要用到圆的半径,因此需要实现获取和设置半径的函数。
-
在 main 函数中,需要读入 Point 类型的对象,并将其输出到文本文件。然后从文本文件中读入 Point 类型的对象,根据其坐标计算出圆的半径并构造 Circle 类型的对象,将其输出到二进制文件。最后从二进制文件中读入 Circle 类型的对象,并调用其周长和面积的计算函数。
代码示例:
#include <iostream>
#include <fstream>
using namespace std;
class Point {
private:
double x;
double y;
public:
Point(double x = 0, double y = 0) : x(x), y(y) {}
void setX(double x) { this->x = x; }
double getX() const { return x; }
void setY(double y) { this->y = y; }
double getY() const { return y; }
friend ostream& operator<<(ostream& out, const Point& p) {
out << '(' << p.x << ',' << p.y << ')';
return out;
}
friend istream& operator>>(istream& in, Point& p) {
char c;
in >> c >> p.x >> c >> p.y >> c;
return in;
}
};
class Plane {
public:
virtual double length() const = 0;
virtual double area() const = 0;
};
class Circle : public Point, public Plane {
protected:
static const double PI = 3.14159;
private:
double radius;
public:
Circle(double x = 0, double y = 0, double radius = 0) : Point(x, y), radius(radius) {}
void setR(double radius) { this->radius = radius; }
double getR() const { return radius; }
double area() const override { return PI * radius * radius; }
double length() const override { return 2 * PI * radius; }
friend ostream& operator<<(ostream& out, const Circle& c) {
out << '(' << c.getX() << ',' << c.getY() << ')' << ',' << c.radius << ')';
return out;
}
friend istream& operator>>(istream& in, Circle& c) {
char ch;
in >> ch >> c.x >> ch >> c.y >> ch >> c.radius >> ch;
return in;
}
};
int main() {
double d1, d2;
cout << "请输入 X 坐标和 Y 坐标:";
cin >> d1 >> d2;
Point p(d1, d2);
ofstream ofs("s3.txt");
ofs << p << endl;
ofs.close();
ifstream ifs("s3.txt");
ifs >> p;
ifs.close();
Circle c(p.getY(), p.getX(), p.getY() + p.getX());
ofstream bofs("b3.dat", ios::binary);
bofs << c << endl;
bofs.close();
ifstream bifs("b3.dat", ios::binary);
bifs >> c;
bifs.close();
cout << "圆的周长:" << c.length() << endl;
cout << "圆的面积:" << c.area() << endl;
return 0;
}
注意:
- 以上代码仅供参考,实际应用中可能需要根据具体需求进行调整。
- 为了方便理解,代码中包含了详细的注释。
- 代码中的
f函数需要根据具体需求进行定义。
通过学习 Point 类和 Circle 类的实现,可以更好地理解面向对象编程的概念,并掌握如何使用 C++ 来实现各种几何图形。
原文地址: https://www.cveoy.top/t/topic/ok3t 著作权归作者所有。请勿转载和采集!