类声明部分
操作符以及操作符重载规则 :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