参考答案

Point类实现:

Point类的数据成员包括: ①私有数据成员:X坐标x(double型),Y坐标y(double型)。 Point类成员函数包括: ①有参构造函数Point(double, double),其中参数分别为X坐标和Y坐标,默认值均为0。 ②公有函数成员void setX(double)和double getX() const分别返回和设置X坐标。 ③公有函数成员void setY(double)和double getY() const分别返回和设置Y坐标。 ④重载运算符<<以实现Point对象的格式输出,输出格式要求: (<X坐标>,<Y坐标>) 例如:(1.0,2.0)等。 ⑤重载运算符>>以实现Point对象的格式输入,输入格式要求: (<X坐标>,<Y坐标>) 例如:(1.0,2.0)等。

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类实现:

Plane类的成员函数包括: ①纯虚函数virtual double length()const用于计算平面图形的周长。 ②纯虚函数virtual double area()const用于计算平面图形的面积。

class Plane { public: virtual double length()const = 0; //周长 virtual double area()const = 0; //面积 };

Circle类实现:

Circle类的数据成员包括: ①圆心坐标继承自Point类。 ②保护静态数据常量PI(double型),其值为3.14159。 ③私有数据成员:半径radius(double型)。 Circle类成员函数包括: ①有参构造函数Circle(double, double, double),其中函数参数包括圆心坐标和半径,圆心调用Point类构造函数进行构造,各参数默认值为0。 ②公有函数成员void setR(double)和double getR()const分别返回和设置radius。 ③重载double area()const用于计算圆的面积。 ④重载double length()const用于计算圆的周长。 ⑤重载运算符<<以实现Circle对象的格式输出,输出格式要求: ((<X坐标>,<Y坐标>),<半径>) 例如:((1.0,2.0),3.0)等。 ⑥重载运算符>>以实现Circle对象的格式输入,输入格式要求: ((<X坐标>,<Y坐标>),<半径>)

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函数实现:

main(void)的操作顺序描述如下: ①首先已输入的d1、d2来构造Point对象p,并将p用<<写入文本文件s3.txt中。 ②再将文本文件s3.txt打开,应用>>操作将里面的数据读入到Point对象p中。 ③利用Point对象p的数据设置Circle对象c,设置要求:将c的圆心X坐标设置为p的Y坐标,将c的圆心Y坐标设置为p的X坐标,将c的半径设置为p的Y坐标与X坐标的和。并将设置好的c写入二进制文件b3.dat中。 ④再将二进制文件b3.dat打开,将里面的数据读入到Circle对象c中。 ⑤最后以c对象为参数调用f函数。

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; }

完整代码如下

基于Point类及平面基类Plane类设计圆类Circle并为Point类和Circle重载实现和运算符mainvoid函数实现Point对象和Circle对象的文件读写操作。Point类结构说明:Point类的数据成员包括:①私有数据成员:X坐标xdouble型Y坐标ydouble型。Point类成员函数包括:①有参构造函数Pointdouble double其中参数分别为X坐标和Y坐标默认值均

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

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