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) 函数的操作顺序描述如下:

  1. 读入 Point 对象: 已输入的 d1d2 来构造 Point 对象 p,并将 p<< 写入文本文件 s3.txt 中。
  2. 从文本文件读入 Point 对象: 将文本文件 s3.txt 打开,应用 >> 操作将里面的数据读入到 Point 对象 p 中。
  3. 构造 Circle 对象: 利用 Point 对象 p 的数据设置 Circle 对象 c,设置要求:
    • c 的圆心 X 坐标设置为 p 的 Y 坐标。
    • c 的圆心 Y 坐标设置为 p 的 X 坐标。
    • c 的半径设置为 p 的 Y 坐标与 X 坐标的和。 并将设置好的 c 写入二进制文件 b3.dat 中。
  4. 从二进制文件读入 Circle 对象: 将二进制文件 b3.dat 打开,将里面的数据读入到 Circle 对象 c 中。
  5. 调用计算函数: 最后以 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++ 来实现各种几何图形。

C++ Point 类和 Circle 类结构详解:实现坐标点和圆形对象

原文地址: https://www.cveoy.top/t/topic/ok3t 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录