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 
原文地址:https://www.cnblogs.com/mrye/p/2671648.html