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

来源:互联网 发布:chunglim淘宝 编辑:程序博客网 时间:2024/06/06 17:04

这里贴上我们讨论了几天的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文件

0 0