C++ 面向对象编程:基于 Point 类和 Plane 类设计圆类 Circle 并实现运算符重载和文件读写操作
C++ 面向对象编程:基于 Point 类和 Plane 类设计圆类 Circle 并实现运算符重载和文件读写操作
需求分析
本程序要求基于 Point 类和 Plane 类设计圆类 Circle,并实现以下功能:
- 为 Point 类和 Circle 类重载 << 和 >> 运算符,实现对象的格式化输入输出。
- 在 main 函数中实现 Point 对象和 Circle 对象的文件读写操作。
代码实现
Point 类实现
class Point
{
private:
double x;
double y;
public:
Point(double xv = 0, double yv = 0) :x(xv), y(yv) {} //构造函数
void setX(double xv) { x = xv; } //设置X坐标
double getX() const { return x; } //获取X坐标
void setY(double yv) { y = yv; } //设置Y坐标
double getY() const { return y; } //获取Y坐标
friend ostream & operator << (ostream &out, const Point &p) //运算符<<重载
{
out << '(' << p.x << ',' << p.y << ')';
return out;
}
friend istream & operator >> (istream &in, Point &p) //运算符>>重载
{
char ch;
in >> ch >> p.x >> ch >> p.y >> ch;
return in;
}
};
Plane 类实现
class Plane
{
public:
virtual double length()const = 0; //周长
virtual double area()const = 0; //面积
};
Circle 类实现
class Circle :public Point, public Plane
{
private:
double radius;
protected:
static const double PI;
public:
Circle(double xv = 0, double yv = 0, double r = 0) :Point(xv, yv), radius(r) {} //构造函数
void setR(double r) { radius = r; } //设置半径
double getR() const { return radius; } //获取半径
double area()const { return PI * radius * radius; } //面积
double length()const { 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 >> ch >> c.radius >> ch;
return in;
}
};
const double Circle::PI = 3.14159;
main 函数实现
int main(void)
{
double d1, d2;
cin >> d1 >> d2;
Point p(d1, d2);
ofstream ofs('s3.txt');
ofs << p << endl; //将p用<<写入文本文件s3.txt中
ofs.close();
ifstream ifs('s3.txt');
ifs >> p; //应用>>操作将里面的数据读入到Point对象p中
ifs.close();
Circle c(p.getY(), p.getX(), p.getX() + p.getY()); //利用Point对象p的数据设置Circle对象c
ofstream ofs2('b3.dat', ios::binary);
ofs2.write(reinterpret_cast<char*>(&c), sizeof(c)); //将设置好的c写入二进制文件b3.dat中
ofs2.close();
ifstream ifs2('b3.dat', ios::binary);
ifs2.read(reinterpret_cast<char*>(&c), sizeof(c)); //将里面的数据读入到Circle对象c中
ifs2.close();
f(c); //以c对象为参数调用f函数
return 0;
}
f 函数实现
void f(Plane const &p)
{
cout << p.area() << endl;
cout << p.length() << endl;
}
总结
本程序展示了如何使用 C++ 面向对象编程思想设计类,并通过重载运算符和文件读写操作来实现数据的输入输出和存储。程序中使用了继承、多态等面向对象编程的关键概念,并通过示例代码展示了如何实现具体的功能。
注意事项
- 在使用文件读写操作时,需要确保文件存在或可创建。
- 使用二进制文件读写时,需要确保数据类型和大小一致。
- 在调用虚函数时,需要确保对象类型正确。
希望本文能够帮助您更好地理解 C++ 面向对象编程的思想和实践。
原文地址: https://www.cveoy.top/t/topic/okA9 著作权归作者所有。请勿转载和采集!