C++抽象编程——面向对象(5)——最终版的point文件

xiaoxiao2021-02-27  477

这里贴上我们讨论了几天的Point类的最终版

Point.h

#ifndef _Point_h #define _Point_h #include <string> class Point { public: /* *构造函数:Point(); *用法:Point p * Point pt(xc,yc) * ------------------------ *创建一个Point类的对象,默认构造函数将默认初始的坐标为(0,0) *第二种形式是用户自行确定x,y的取值 */ Point(); Point(int xc, int yc); /* *方法:getX,getY *用法: int x = pt.getX() * int y = pt.getY() *------------------------ *用途: 返回Point类中的,x 与 y的值 */ int getX(); int getY(); /* *方法:toString *用法:string str = pt.tostring() *------------------------ *用途: 以“(x,y)”形式返回Point的字符串表示形式。 */ std::string toString(); /*这个接口存放着类内不希望用户看到的功能和私有部分 */ #include "pointpriv.h" }; /* *运算符:<< *用法:cout << pt * ------------ *用途:重载运算符,使得其能按要求输出 */ std::ostream & operator<<(std::ostream & os, Point pt); /* *运算符:== *用法:if(pt1 == pt2) ..... * ------------ *用途:判断两个point类对象是不是相等 */ bool operator==(Point p1, Point p2); /* *运算符:!= *用法:if(pt1 != pt2) ..... * ------------ *用途:判断两个point类对象是不是相等,与上面的区分开,我们重载了 ==,不意味着 * == 对应的 != 就是取反,因为我们还没给!= 重载对于point的运算 */ bool operator!=(Point p1, Point p2); #endif

注意:这里我们没有把运算符重载的函数原型放入到类的里面,原因是它根本就不属于类,它是自由函数(就是上一篇写的第二种情况 )。但是它又与point类有着关联,所以我们把它放在point的头文件里面。

pointpriv.h

/* *这个部分是包含了point类的私有部分。 *这部分内容并不希望用户通过接口看到,因为这些内容 *对于用户来说,是不能被修改的,或者是没有意义的 * */ /*函数声明*/ friend bool operator==(Point p1, Point p2); private: /*实例参数*/ int x; int y;

这里提一下为什么不把 != 的重载也设为friend函数放进来,因为 !=的重载没用到Point类的私有成员,所以也没必要这么做,它用的只是 == 运算符返回的结果而已。

Point.cpp

#include <string> #include "Point.h" #include "strlib.h" using namespace std; Point::Point(){ x = 0; y = 0; } Point::Point(int xc, int yc) { x = xc; y = yc; } int Point::getX(){ return x; } int Point::getY(){ return y; } string Point::toString(){ return "(" + integerToString(x) + "," + integerToString(y) + ")"; } bool operator==(Point p1, Point p2) { return p1.x == p2.x && p1.y == p2.y; } bool operator!=(Point p1, Point p2) { return !(p1 == p2); } ostream & operator<<(ostream & os, Point pt) { return os << pt.toString(); }

关于 strlib头文件,参考strlib文件

转载请注明原文地址: https://www.6miu.com/read-197.html

最新回复(0)