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

这里贴上我们讨论了几天的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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值