类声明部分
操作符以及操作符重载规则 :http://www.cnblogs.com/mrye/archive/2012/09/05/2671736.html
#pragma once #ifndef INTEGER_H_ #define INTEGER_H_ #include <iostream> using std::ostream; class Integer { public: //构造和析构 Integer(void); ~Integer(void); //不允许当做类型转换函数 explicit Integer(int); public : //操作符重载 Integer& operator +(Integer &value); Integer& operator -(Integer &value); //强转重载,比较特殊 Integer& operator =(const int &value); friend Integer& operator||(Integer& integer, int& value); friend ostream& operator<<(ostream & stream,Integer &value); operator int()const; public: //基本函数 int IntValue(); private: int value; }; #endif
实现部分
#include "Integer.h" /************************************************************************/ /* 无参构造函数 */ /************************************************************************/ Integer::Integer(void) { } /************************************************************************/ /* 析构函数 */ /************************************************************************/ Integer::~Integer(void) { } /************************************************************************/ /* 使用int初始化 */ /************************************************************************/ Integer::Integer(int value){ this->value=value; } /************************************************************************/ /* 加法操作 */ /************************************************************************/ Integer& Integer::operator+(Integer &value){ this->value+=value.IntValue(); return *this; } /************************************************************************/ /* 减法操作 */ /************************************************************************/ Integer& Integer::operator-(Integer &value){ this->value-=value.IntValue(); return *this; } /************************************************************************/ /* 赋值操作 */ /************************************************************************/ Integer& operator||(Integer& integer, int& value){ integer.value=value; return integer; } /************************************************************************/ /* 同样是赋值 */ /************************************************************************/ Integer& Integer::operator=(const int& value){ this->value=value; return *this; } /************************************************************************/ /* 获取值 */ /************************************************************************/ int Integer::IntValue(){ return this->value; } /************************************************************************/ /* 重载输出 */ /************************************************************************/ ostream & operator<<(ostream & stream,Integer &value) { stream<<value.value; return stream; } /************************************************************************/ /* 转换成int */ /************************************************************************/ Integer::operator int()const{ return this->value; }
调用部分
#include <iostream> #include "Integer.h" int main(int argc,char* argv[]){ using std::cout; using std::endl; Integer integerA(5); Integer* pIntegerB=new Integer(6); Integer* pIntegerC=new Integer;//不能确定指向了哪 Integer pIntegerD;//没分配内存。不知道指向哪了 Integer pIntegerH=(Integer)'h'; pIntegerD=8;//分配了内存。指向了8 cout<<"(pIntegerB-pIntegerA):"<<((*pIntegerB)-integerA).IntValue()<<endl; cout<<integerA<<endl; cout<<*pIntegerB<<endl; cout<<*pIntegerC<<endl; cout<<pIntegerD<<endl; Integer t;//如果Integer t=6;调用的是构造函数 t=6;//调用=重载运算 //t自动转换成int int a=t; //二元运算符重载成友元函数 pIntegerD||a; //已经重载了<<接受ostream和Integer类型的操作符 cout<<pIntegerD<<endl; delete pIntegerB; delete pIntegerC; return 0; }
输出部分
(pIntegerB-pIntegerA):1 5 1 -842150451 8 6