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; }
相关文章推荐
- 常见排序的的C语言实现
- C语言中如何使用宏
- C++课程设计-银行储蓄系统
- c++11 实现半同步半异步线程池
- Project Euler 46 solution optimized using C++ meta-programming
- C/C++中调用执行python脚本文件
- c/c++指针
- c++进行文件摘要
- Cantor表
- wyh2000 and a string problem(bc题)
- C++中二维数组的动态创建与处理
- C++ Primer快速入门之五:实用的模板库
- PHP,C++,Mysql
- PHP中如何通过Web执行C/C++应用程序?
- C语言中内存分配那些事儿
- c++虚函数表解析
- 转:线程池原理及创建(C++实现)
- 编写一个C++风格的程序,计算输出Fibonacci数列的前20项
- C语言的内存管理分析 栈区 代码区 堆区 静态区 常量区
- VC++代码分析