• 十进制转换为任意进制及操作符重载


    #include<iostream>
    #include<vector>
    #include<limits>
    using namespace std;
    using std::iterator;
    ///<summary>
    ///十进制转换为任意进制,为了熟悉操作符,也加了操作符重载。
    ///包括自增(++),运算符重(+),赋值函数重载(=),输出符(<<)
    ///</summary>
    class TenToAny
    {
    	vector<char> value;
    	long long _n;
    	long long _x;
    public:
    	TenToAny():_n(10),_x(0)
    	{	
    
    	}
    	void Switch()
    	{
    		try
    		{
    			int x=_x, n=_n;
    			char flag=' ';
    			if(x>LONG_MAX||x<LONG_MIN)
    				throw "溢出";
    			if(x<0)
    			{
    				flag='-';
    				x=-x;
    			}
    		
    			while(x!=0)
    			{
    				long long remain = x%n;
    				 x = x/n;
    		
    				if(remain>=10)
    					remain = 'A'+ remain % 10;
    				else 
    					remain +='0';
    				value.push_back(remain);
    			}
    			vector<char>::reverse_iterator v= value.rbegin();
    			while(*v=='0')
    				value.pop_back();
    			if(flag=='-')
    				value.push_back(flag);
    		}
    		catch(char *e)
    		{
    			cout<<e<<endl;
    		}
    	}
    	TenToAny(long long n,long long x)
    	{
    		_n=n;
    		_x=x;
    		Switch();
    	}
        TenToAny &operator = (const TenToAny &num)
    	{
    		if(this==&num)
    			return *this;
    		value=num.value;
    		_n=num._n;
    		_x=num._x;
    		return *this;
    	}
    	TenToAny operator +(const TenToAny &num1)
    	{
    		TenToAny num;
    		num._x=num1._x + _x;
    		num._n=num1._n;
    		num.Switch();
    		return num;
    	}
    	TenToAny &operator ++()//前置++
    	{
    		_x++;
    		value.clear();
    		this->Switch();
    		return *this;
    	}
    	TenToAny &operator ++(int)//后置++
    	{
    		TenToAny *temp=new TenToAny(this->_n,this->_x);
    		_x++;
    		value.clear();
    		this->Switch();
    		return *temp;
    	}
    	friend ostream &operator <<(ostream &out,TenToAny num);
    	
    
    };
    ostream &operator <<(ostream &out,TenToAny num)
    {
    	vector<char> value =num.value;
    	vector<char>::reverse_iterator v= value.rbegin();
    	for(;v!=value.rend();v++)
    	{
    		out<<*v;
    	}
    	return out;
    }
    int main()
    {
    	TenToAny num(19,111);
    	TenToAny copy(19,222);
    	TenToAny sum;
    	sum =num+copy;
    	cout<<num<<endl;
    	cout<<copy<<endl;
    
    	cout<<copy++<<endl;
    
    	cout<<(++copy)<<endl;
    
    	return 0;
    }
    
    
    

    运行结果:


  • 相关阅读:
    git
    sublime text
    WIX安装图文并茂简易说明
    C#利用Lambda和Expression实现数据的动态绑定
    Ubuntu/CentOS下如何将普通用户提升到root权限
    虚拟机安装CentOS6.4用“桥接:直接连接到物理网线”不能上网的原因及解决方法
    C#利用lambda表达式将函数作为参数或属性跨类传递
    直接将XML存入到SQL中(SQL2008)
    C# 类中继承接口的属性
    提高开发效率的Visual Studio 2010使用技巧
  • 原文地址:https://www.cnblogs.com/james1207/p/3303951.html
Copyright © 2020-2023  润新知