当前位置:编程学习 > C/C++ >>

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

#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;
}

 

补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,