您的位置:首页 > 编程语言 > C语言/C++

C++面向对象思想下的进制转换

2015-07-19 09:00 281 查看

C++面向对象思想实现进制转换。

基于面向对象的思想,应该讲数字与转换的方法分开,因为数字本身不可能有转换进制的功能,所以应单独将数字与转换进行封装。

构建两个类:

1.数字类

string num 保存数字,如:A3

int binary 保存进制 如:16

2.转换类

各种转换进制的成员函数

代码如下:

#include <iostream>
#include <string>
#include <cmath>
using namespace std;

class Number
{
private:
string num;		//数
int binary;		//进制 2~16
public:
Number(string n,int b);	//构造函数
~Number();		//析构函数
string GetNum(){return num;}
int GetBinary(){return binary;}
};

class Convert
{
private:
int ii;
public:
int ToD(string num,int binary);
//转换为十进制
void ToN(string num,int binary,int n);
//转换为任意进制
char NumToChar(char num);
//将一数字转换为字符
int CharToNum(char num);
//将一字符转换为数字
};

int main()
{
string num;
int binary;
int n;

cout<<"输入一个数和其进制数(2~16):\n";
cin>>num>>binary;
Number N(num,binary);

Convert con;
con.ToD(N.GetNum(),N.GetBinary());

while(1)
{
cout<<"转换的进制(2~15):____\b\b\b";
cin>>n;
con.ToN(N.GetNum(),N.GetBinary(),n);
cout<<"\n";
}

return 0;
}

//构造函数
Number::Number(string n,int b)
{
num=n;
binary=b;
}

//析构函数
Number::~Number()
{
cout<<"析构函数被调用!\n";
}

//转换为十进制
int Convert::ToD(string num,int binary)
{
int len=num.size();
int decimal=0;
char t[10];
for(int i=0;i<len;i++)
{
decimal+=CharToNum(num[i])*pow(binary,len-i-1);
}
binary = 10;
sprintf(t,"%d",decimal);
num=t;
cout<<"转换为十进制后为:"<<decimal<<"\n";
return decimal;
}

//转换为任意进制
void Convert::ToN(string num,int binary,int n)
{
char temp;
string result;
int len=num.size();
int decimal=0;
for(int i=0;i<len;i++)
{
decimal+=CharToNum(num[i])*pow(binary,len-i-1);
}

while(decimal>0)
{
temp=decimal%n;
result+=NumToChar(temp);
decimal=decimal/n;
}
binary=n;
num="";
for(i=result.size()-1;i>=0;i--)
{
num+=result[i];
cout<<result[i];
}
}

//将一个整形数字转换为一个字符型数字
char Convert::NumToChar(char num)
{
if(num<=9&&num>=0)
num+=48;
else
switch(num)
{
case 10:num='A';break;
case 11:num='B';break;
case 12:num='C';break;
case 13:num='D';break;
case 14:num='E';break;
case 15:num='F';break;
}
return num;
}

//将一个字符型数字转化为整形数字
int Convert::CharToNum(char num)
{
if(num<='9'&&num>='0')
{
num-=48;
}
else
switch(num)
{
case 'A':
case 'a':num=10;break;
case 'B':
case 'b':num=11;break;
case 'C':
case 'c':num=12;break;
case 'D':
case 'd':num=13;break;
case 'E':
case 'e':num=14;break;
case 'F':
case 'f':num=15;break;
}
return num;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: