您的位置:首页 > 其它

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

2013-09-05 18:31 459 查看
#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;
}

运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: