C++操作符重载
类声明部分
操作符以及操作符重载规则 :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
                    
                
                
            
        
浙公网安备 33010602011771号