C++ 基于Point类和Plane类设计圆类Circle并重载运算符实现文件读写操作
C++ 基于Point类和Plane类设计圆类Circle并重载运算符实现文件读写操作
一、Point类的实现
Point类的实现较为简单,根据题目给出的要求实现即可。
Point.h:
#ifndef __POINT_H__
#define __POINT_H__
#include <iostream>
class Point {
public:
Point(double xv = 0, double yv = 0); //构造函数,参数为点的x坐标和y坐标
double getX() const; //获取x坐标
double getY() const; //获取y坐标
void setX(double xv); //设置x坐标
void setY(double yv); //设置y坐标
friend std::ostream& operator<<(std::ostream& out, const Point& p); //重载输出运算符
friend std::istream& operator>>(std::istream& in, Point& p); //重载输入运算符
private:
double x, y;
};
#endif
Point.cpp:
#include "Point.h"
Point::Point(double xv, double yv) : x(xv), y(yv) {}
double Point::getX() const {
return x;
}
double Point::getY() const {
return y;
}
void Point::setX(double xv) {
x = xv;
}
void Point::setY(double yv) {
y = yv;
}
std::ostream& operator<<(std::ostream& out, const Point& p) {
out << '(' << p.getX() << ',' << p.getY() << ')';
return out;
}
std::istream& operator>>(std::istream& in, Point& p) {
char c;
in >> c >> p.x >> c >> p.y >> c;
return in;
}
二、Circle类的实现
Circle类实现时需要继承Point类和Plane类,实现面向对象编程中的多重继承。
Circle.h:
#ifndef __CIRCLE_H__
#define __CIRCLE_H__
#include "Point.h"
#include "Plane.h"
class Circle : public Point, public Plane {
public:
Circle(double xv = 0, double yv = 0, double rv = 0); //构造函数,参数为圆心坐标和半径
double getR() const; //获取半径
void setR(double r); //设置半径
double area() const; //计算圆的面积
double length() const; //计算圆的周长
friend std::ostream& operator<<(std::ostream& out, const Circle& c); //重载输出运算符
friend std::istream& operator>>(std::istream& in, Circle& c); //重载输入运算符
private:
double radius;
static const double PI; //常量PI
};
#endif
Circle.cpp:
#include "Circle.h"
#include <cmath>
const double Circle::PI = 3.14159;
Circle::Circle(double xv, double yv, double rv) : Point(xv, yv), radius(rv) {}
double Circle::getR() const {
return radius;
}
void Circle::setR(double r) {
radius = r;
}
double Circle::area() const {
return PI * pow(radius, 2);
}
double Circle::length() const {
return 2 * PI * radius;
}
std::ostream& operator<<(std::ostream& out, const Circle& c) {
out << '(' << c.getX() << ',' << c.getY() << ',' << c.getR() << ')';
return out;
}
std::istream& operator>>(std::istream& in, Circle& c) {
char ch;
double x, y, r;
in >> ch >> x >> ch >> y >> ch >> r >> ch;
c = Circle(x, y, r);
return in;
}
三、main函数的实现
main函数首先读入d1和d2,并根据d1和d2的值构造一个Point对象p,接着将Point对象p写入文本文件s3.txt中,然后从文件s3.txt中读入数据,设置Circle对象c,将设置好的Circle对象c写入二进制文件b3.dat中,最后从文件b3.dat中读入数据,调用f函数。
main.cpp:
#include <iostream>
#include <fstream>
#include "Circle.h"
void f(Plane const& p) {
std::cout << p.area() << std::endl;
std::cout << p.length() << std::endl;
}
int main(void) {
double d1, d2;
std::cin >> d1 >> d2;
Point p(d1, d2);
std::ofstream fout("s3.txt");
fout << p << std::endl;
fout.close();
Point q;
std::ifstream fin("s3.txt");
fin >> q;
fin.close();
Circle c;
c.setX(q.getY());
c.setY(q.getX());
c.setR(q.getY() + q.getX());
std::ofstream bout("b3.dat", std::ios::binary);
bout.write((char*)&c, sizeof(Circle));
bout.close();
std::ifstream bin("b3.dat", std::ios::binary);
bin.read((char*)&c, sizeof(Circle));
bin.close();
f(c);
return 0;
}
完整代码
#ifndef __POINT_H__
#define __POINT_H__
#include <iostream>
class Point {
public:
Point(double xv = 0, double yv = 0); //构造函数,参数为点的x坐标和y坐标
double getX() const; //获取x坐标
double getY() const; //获取y坐标
void setX(double xv); //设置x坐标
void setY(double yv); //设置y坐标
friend std::ostream& operator<<(std::ostream& out, const Point& p); //重载输出运算符
friend std::istream& operator>>(std::istream& in, Point& p); //重载输入运算符
private:
double x, y;
};
#endif
#include "Point.h"
Point::Point(double xv, double yv) : x(xv), y(yv) {}
double Point::getX() const {
return x;
}
double Point::getY() const {
return y;
}
void Point::setX(double xv) {
x = xv;
}
void Point::setY(double yv) {
y = yv;
}
std::ostream& operator<<(std::ostream& out, const Point& p) {
out << '(' << p.getX() << ',' << p.getY() << ')';
return out;
}
std::istream& operator>>(std::istream& in, Point& p) {
char c;
in >> c >> p.x >> c >> p.y >> c;
return in;
}
#ifndef __CIRCLE_H__
#define __CIRCLE_H__
#include "Point.h"
#include "Plane.h"
class Circle : public Point, public Plane {
public:
Circle(double xv = 0, double yv = 0, double rv = 0); //构造函数,参数为圆心坐标和半径
double getR() const; //获取半径
void setR(double r); //设置半径
double area() const; //计算圆的面积
double length() const; //计算圆的周长
friend std::ostream& operator<<(std::ostream& out, const Circle& c); //重载输出运算符
friend std::istream& operator>>(std::istream& in, Circle& c); //重载输入运算符
private:
double radius;
static const double PI; //常量PI
};
#endif
#include "Circle.h"
#include <cmath>
const double Circle::PI = 3.14159;
Circle::Circle(double xv, double yv, double rv) : Point(xv, yv), radius(rv) {}
double Circle::getR() const {
return radius;
}
void Circle::setR(double r) {
radius = r;
}
double Circle::area() const {
return PI * pow(radius, 2);
}
double Circle::length() const {
return 2 * PI * radius;
}
std::ostream& operator<<(std::ostream& out, const Circle& c) {
out << '(' << c.getX() << ',' << c.getY() << ',' << c.getR() << ')';
return out;
}
std::istream& operator>>(std::istream& in, Circle& c) {
char ch;
double x, y, r;
in >> ch >> x >> ch >> y >> ch >> r >> ch;
c = Circle(x, y, r);
return in;
}
#include <iostream>
#include <fstream>
#include "Circle.h"
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);/*构造函数*/
void setR(double r); /*设置半径*/
double getR() const; /*获取半径*/
double area()const; /*面积*/
double length()const; /*周长*/
friend ostream & operator << (ostream &out, const Circle &c); //运算符<<重载
friend istream & operator >> (istream &in, Circle &c); //运算符>>重载
};
/*请在这里填写第一部分答案*/
void f(Plane const &p)
{
cout<<p.area()<<endl;
cout<<p.length()<<endl;
}
//主函数
int main(void)
{
double d1,d2;
cin>>d1>>d2;
Point p(d1,d2);
Circle c;
/*请在这里填写第二部分答案*/
f(c);
return 0;
}
void f(Plane const& p) {
std::cout << p.area() << std::endl;
std::cout << p.length() << std::endl;
}
int main(void) {
double d1, d2;
std::cin >> d1 >> d2;
Point p(d1, d2);
std::ofstream fout("s3.txt");
fout << p << std::endl;
fout.close();
Point q;
std::ifstream fin("s3.txt");
fin >> q;
fin.close();
Circle c;
c.setX(q.getY());
c.setY(q.getX());
c.setR(q.getY() + q.getX());
std::ofstream bout("b3.dat", std::ios::binary);
bout.write((char*)&c, sizeof(Circle));
bout.close();
std::ifstream bin("b3.dat", std::ios::binary);
bin.read((char*)&c, sizeof(Circle));
bin.close();
f(c);
return 0;
}
补充说明
- 以上代码仅供参考,实际使用中可能需要根据具体需求进行调整。
- 可以根据需要添加更多功能,例如:添加圆的半径、圆心的坐标等属性;重载其他运算符;实现其他功能等等。
- 该代码实现了基本的文件读写操作,可以根据实际需求进行修改,例如:使用不同的文件格式;进行更复杂的文件操作等等。
- 在进行文件操作时,需要确保文件操作的正确性,避免出现文件操作错误。
- 可以使用其他工具进行代码测试和调试,例如:使用调试器;使用测试框架等等。
希望这篇文章能够帮助你理解如何使用C++语言基于Point类和Plane类设计圆类Circle,并重载运算符实现文件读写操作。
原文地址: https://www.cveoy.top/t/topic/okCz 著作权归作者所有。请勿转载和采集!