二进制类(运算符号的重载)

【问题描述】将一个16位二进制数表示成0和1的字符序列,即用一个字符数组来存放这个二进制数。在这个类中设置两个构造函数,一个是传递整数参数的,另一个是传递字符串参数的。因为用户在创建对象时传递的二进制数,可能是以整数形式给出,也可能是以数字串形式给出,系统应该都能接受。另外有一个类型转换函数int(),用来将类类型向整型转换,即将二进制形式的类对象转换为整形数。两个重载运算符“+”,“-”,用来完成两个二进制数之间的加减运算。

class binary {    //定义二进制类

   char bits[16];  //二进制字模数组

public:

   binary(char *);   //字符串参数构造函数

   binary(int);      //整型参数构造函数

   friend binary operator +(binary,binary);   //重载“+”,友元函数

   friend binary operator -(binary,binary);   //重载“-”,友元函数

   operator int();  //类类型转换函数,成员函数

   friend ostream & operator <<(ostream &out, binary &b);//重载“<<”,以二进制形式输出

   void print();//以整型形式输出

};

主函数设计如下,请勿修改:

int main(){

   binary n1="1011";

   binary n2=int(n1)+15;

   binary n3=n1-binary(7);

   cout<<n1<<endl;

   cout<<n2<<endl;

   cout<<n3<<endl;

   cout<<int(n2)+5<<endl;

   n2=n2-binary(5);

   n2.print();

   n3=n3+binary(5);

   n3.print();

   cout<<int(n3)-5<<endl;

   return 0;

}

【样例输出】

0000000000001011

0000000000011010

0000000000000100

31

21

9

4

#include <iostream>
#include <string.h>
#include <math.h>
using namespace std;

class binary //定义二进制类
{
private:
    char bits[16];  //二进制字模数组
public:
    binary(char *);   //字符串参数构造函数
    binary(int);      //整型参数构造函数
    friend binary operator +(binary,binary);   //重载“+”,友元函数
    friend binary operator -(binary,binary);   //重载“-”,友元函数
    operator int();  //类类型转换函数(将类类型向整型转换,即将二进制形式的类对象转换为整形数)
    friend ostream & operator <<(ostream &out, binary &b);//重载“<<”,以二进制形式输出
    void print();//以整型形式输出
};

binary::binary(char * str)   //字符串参数构造函数
{
	int i,j;
    //把bits数组全部元素初始化为0
    for(i=0;i<16;++i)
        bits[i] = '0';

    int len = strlen(str);
    for(i=len-1,j=15;i>=0;--i,--j)//i的初始化是len-1 不然最后数组只存储了15个字符而不是16个
        bits[j] = str[i];
}

binary::binary(int x)      //整型参数构造函数
{
	int i;
    //把bits数组全部元素初始化为0
//    for( i=0;i<16;++i)
//        bits[i] = '0';
  memset(bits,'0',16);//库函数等价于上面被注释的语句 

    i = 15;
    while( x>0 )
    {
        bits[i--] = x%2+'0';//注意bits[i]是字符数组,要类型转换
        x /= 2;
    }
}

binary operator +(binary t1,binary t2)   //重载“+”,友元函数
{
    binary tt = (int)t1 + (int)t2;
    return tt;
}

binary operator -(binary t1,binary t2)   //重载“-”,友元函数
{
    binary tt = fabs( (int)t1 - (int)t2 );//wow 这句真的很简单 
    return tt;
}

binary::operator int()  //类类型转换函数(将类类型向整型转换,即将二进制形式的类对象转换为整形数)
{
    int num = 0;
    for(int i=15,j=0;i>=0;--i,++j)
        num += (bits[i]-'0') * pow(2,j);//注意:别忘记bits[i]数组中存储的是字符而不是数字,要减'0'
    return num;
}

ostream & operator <<(ostream &out, binary &b)//重载“<<”,以二进制形式输出
{
    for(int i=0;i<16;++i)
        out << b.bits[i];//因为没有'\0'所以要挨个输出 
    return out;
}

void binary::print()//以整型形式输出
{
    cout << (int)*this << endl;///
    //cout<<int(*this)<<endl;也可 
}

int main()
{
    binary n1="1011";
    binary n2=int(n1)+15;
    binary n3=n1-binary(7);
    cout<<n1<<endl;
    cout<<n2<<endl;
    cout<<n3<<endl;
    cout<<int(n2)+5<<endl;
    n2=n2-binary(5);
    n2.print();
    n3=n3+binary(5);
    n3.print();
    cout<<int(n3)-5<<endl;
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值