C++ 面向对象编程:圆类设计与运算符重载
#include <iostream>
#include <fstream>
using namespace std;
//点类Point
class Point
{
private:
double x;
double y;
public:
Point(double xv=0,double yv=0);/*构造函数*/
void setX(double xv); /*设置X坐标*/
void setY(double yv); /*设置Y坐标*/
double getX() const; /*获取X坐标*/
double getY() const; /*获取Y坐标*/
friend ostream & operator << (ostream &out, const Point &p); //运算符<<重载
friend istream & operator >> (istream &in, Point &p); //运算符>>重载
};
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); //运算符>>重载
};
const double Circle::PI = 3.14159;
Point::Point(double xv,double yv)
{
x = xv;
y = yv;
}
void Point::setX(double xv)
{
x = xv;
}
void Point::setY(double yv)
{
y = yv;
}
double Point::getX() const
{
return x;
}
double Point::getY() const
{
return y;
}
ostream & operator << (ostream &out, const Point &p)
{
out << '(' << p.x << ',' << p.y << ')';
return out;
}
istream & operator >> (istream &in, Point &p)
{
char c;
in >> c >> p.x >> c >> p.y >> c;
return in;
}
Circle::Circle(double xv,double yv,double r):Point(xv,yv)
{
radius = r;
}
void Circle::setR(double r)
{
radius = r;
}
double Circle::getR() const
{
return radius;
}
double Circle::area()const
{
return PI * radius * radius;
}
double Circle::length()const
{
return 2 * PI * radius;
}
ostream & operator << (ostream &out, const Circle &c)
{
out << '(' << c.getX() << ',' << c.getY() << ')' << ',' << c.radius;
return out;
}
istream & operator >> (istream &in, Circle &c)
{
char c;
in >> c >> c >> c.getX() >> c >> c.getY() >> c >> c >> c.radius >> c >> c;
return in;
}
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;
ofstream outfile("s3.txt");
outfile << p;
outfile.close();
ifstream infile("s3.txt");
infile >> p;
infile.close();
c.setX(p.getY());
c.setY(p.getX());
c.setR(p.getY() + p.getX());
ofstream outFile("b3.dat", ios::binary);
outFile.write((char*)&c, sizeof(c));
outFile.close();
ifstream inFile("b3.dat", ios::binary);
inFile.read((char*)&c, sizeof(c));
inFile.close();
f(c);
return 0;
}
原文地址: https://www.cveoy.top/t/topic/okCl 著作权归作者所有。请勿转载和采集!