• 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 
  • 相关阅读:
    【 socke】C# socket端口复用-多主机头绑定
    【网络】 NAT
    【socket】高级用法-ReceiveMessageFrom
    【socket】高级用法-异步
    C# GET 和 SET作用
    多态是什么意思?
    LINQ(LINQ to Entities)
    LINQ(隐式表达式、lambda 表达式)
    LINQ(LINQ to DataSet)
    C# 中的委托和事件
  • 原文地址:https://www.cnblogs.com/mrye/p/2671648.html
Copyright © 2020-2023  润新知