C++ Point类、Plane类、Circle类结构说明及代码示例
C++ Point类、Plane类、Circle类结构说明及代码示例
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)等。
Plane类结构说明:
Plane类的成员函数包括:
① 纯虚函数virtual double length()const用于计算平面图形的周长。 ② 纯虚函数virtual double area()const用于计算平面图形的面积。
Circle类结构说明:
公有派生圆类Circle以点类Point、平面图形类Plane为基类,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坐标>),<半径>)
main(void)说明:
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函数。
#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& os, const Point& p) {
os << "(" << p.x << "," << p.y << ")";
return os;
}
friend istream& operator>>(istream& is, Point& p) {
char c;
is >> c >> p.x >> c >> p.y >> c;
return is;
}
};
class Plane {
public:
virtual double length() const = 0;
virtual double area() const = 0;
};
class Circle : public Plane, public Point {
private:
static const double PI;
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 length() const override { return 2 * PI * radius; }
double area() const override { return PI * radius * radius; }
friend ostream& operator<<(ostream& os, const Circle& c) {
os << "(" << static_cast<Point>(c) << "," << c.radius << ")";
return os;
}
friend istream& operator>>(istream& is, Circle& c) {
char ch;
is >> ch >> static_cast<Point&>(c) >> ch >> c.radius >> ch;
return is;
}
};
const double Circle::PI = 3.14159;
void f(const Plane& p) {
cout << "length = " << p.length() << endl;
cout << "area = " << p.area() << endl;
}
int main() {
// 将p写入文本文件s3.txt中
Point p(1.0, 2.0);
ofstream ofs("s3.txt");
ofs << p;
ofs.close();
// 从文本文件s3.txt中读取数据到p中
ifstream ifs("s3.txt");
ifs >> p;
ifs.close();
// 创建c对象并设置属性
Circle c(p.getY(), p.getX(), p.getY() + p.getX());
// 将c写入二进制文件b3.dat中
ofstream ofs2("b3.dat", ios::binary);
ofs2.write((char*)&c, sizeof(c));
ofs2.close();
// 从二进制文件b3.dat中读取数据到c中
Circle c2;
ifstream ifs2("b3.dat", ios::binary);
ifs2.read((char*)&c2, sizeof(c2));
ifs2.close();
// 调用函数f
f(c2);
return 0;
}
原文地址: https://www.cveoy.top/t/topic/ok3m 著作权归作者所有。请勿转载和采集!