您好,欢迎来到华佗小知识。
搜索
您的当前位置:首页姜志达实验十报告

姜志达实验十报告

来源:华佗小知识
实验十实验报告

——姜志达

1.实验目的

(1) 掌握运算符重载的定义及实现。 (2) 掌握具有运算符重载的应用。

2.实验设备

硬件环境:微型计算机 软件环境:

操作系统: Windows 语言环境: Visual C++

3.预习要求

学习教材有关运算符重载的内容,对基本运算符重载及特殊运算符重载有充分的理解。对实验基本要求应在上机实验前仔细阅读,程序应事先编制完成,上机时录入调试,同时还应设计相应的测试用例集,检查程序的正确性、可靠性、完备性和容错能力。

4.实验内容

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

#include \"iostream.h\"

#include \"string.h\" #include \"conio.h\"

class binary { //定义二进制类

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

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

friend binary operator +(binary,binary); //重载“+” friend binary operator -(binary,binary); //重载“-”

operator int(); //类类型转换函数 void print(); };

binary::binary(char *num) {

int isrc=strlen(num)-1; //字符串长度-1为最低位 int idest=15;

while(isrc>=0 && idest>=0)

bits[idest--]=(num[isrc--]=='0'?'0':'1'); // 逐位赋值 while(idest>=0) bits[idest--]='0'; // 空高位值0 }

binary::binary(int num) {

for(int i=15; i>=0;i--)

{ bits[i]=( (1) ); //求余数

num>>=1; //移位,相当于整除2 } }

binary operator +(binary n1, binary n2) {

unsigned carry=0; unsigned value; binary res=\"0\";

for(int i=15; i>=0; i--) {

value=(n1.bits[i]=='0'?0:1)+( (2) )+carry; res.bits[i]=(value%2==0?'0':'1'); carry=value>>1; }

return res; }

binary operator -(binary n1, binary n2) {

unsigned borrow=0; int value;

binary res=\"0\";

for(int i=15; i>=0; i--) {

value=(n1.bits[i]=='0'?0:1)-(n2.bits[i]=='0'?0:1)+borrow; res.bits[i]=(value==-1||value==1?'1':'0');

borrow=(value==-1||borrow!=0&&(value==0||value==1)?1:0); }

return res; }

binary::operator int() {

unsigned value=0;

for(int i=0; i<=15; i++)

value=( (3) )+(bits[i]=='0'?0:1); return value; }

void binary::print() {

char str[17];

strncpy(str,bits,16); str[16]='\\0'; cout<main() {

binary n1=\"1011\"; binary n2=int(n1)+15; binary n3=n1-binary(7); n1.print(); n2.print(); n3.print();

cout<[基本要求]

 阅读下列程序,根据题意要求在处填上合适的内容完成程序。

 上机录入、调试上面程序。

 运行程序,纪录并分析运行结果是否正确。 [分析与思考]

 将 + 、 - 运算符定义为binary类的成员函数。

 重载运算符 ~ 、 & 、 | 分别将二进制数按位取反、数按位与及按位或。

(2)编写一个集合类,重载+(并集)、-(差集)、*(交集)、<<(输出)、>>(输入)等函数。

5.实验过程

解:

(1)num%2==0?'0':'1' (2)n2.bits[i]=='0'?0:1 (3)value*2

6.分析与思考

注:由于一些问题不会处理,思考题没能做出来,参,尽力理解后完成的。

解:

1、

#include #include #include using namespace std;

class binary {

char bits[16]; public:

binary(char *); binary(int);

binary operator +(binary); binary operator -(binary); operator int(); void print(); };

binary::binary(char *num) {

int isrc=strlen(num)-1; int idest=15;

while(isrc>=0 && idest>=0)

bits[idest--]=(num[isrc--]=='0'?'0':'1'); while(idest>=0) bits[idest--]='0'; }

binary::binary(int num) {

for(int i=15; i>=0;i--)

{ bits[i]=(num%2==0?'0':'1'); num>>=1; }

}

binary binary::operator +(binary n) {

unsigned carry=0; unsigned value; binary res=\"0\";

for(int i=15; i>=0; i--) {

value=(bits[i]=='0'?0:1)+(n.bits[i]=='0'?0:1)+carry; res.bits[i]=(value%2==0?'0':'1'); carry=value>>1; }

return res; }

binary binary::operator -(binary n) {

unsigned borrow=0; int value;

binary res=\"0\";

for(int i=15; i>=0; i--) {

value=(bits[i]=='0'?0:1)-(n.bits[i]=='0'?0:1)+borrow; res.bits[i]=(value==-1||value==1?'1':'0');

borrow=(value==-1||borrow!=0&&(value==0||value==1)?1:0); }

return res; }

binary::operator int() {

unsigned value=0;

for(int i=0; i<=15; i++)

value=( value*2)+(bits[i]=='0'?0:1); return value; }

void binary::print() {

char str[17];

strncpy(str,bits,16); str[16]='\\0'; cout<}

int main() {

binary n1=\"1011\"; binary n2=int(n1)+15; binary n3=n1-binary(7); n1.print(); n2.print(); n3.print();

cout<2、

#include #include #include using namespace std; class binary {

char bits[16]; public:

binary(char *); binary(int);

friend binary operator +(binary,binary); friend binary operator -(binary,binary); friend binary operator|(binary,binary); friend binary operator &(binary,binary); binary operator ~(); operator int(); void print(); };

binary::binary(char *num) {

int isrc=strlen(num)-1; int idest=15;

while(isrc>=0 && idest>=0)

bits[idest--]=(num[isrc--]=='0'?'0':'1'); while(idest>=0) bits[idest--]='0'; }

binary::binary(int num) {

for(int i=15; i>=0;i--)

{ bits[i]=(num%2==0?'0':'1'); num>>=1; } }

binary operator +(binary n1, binary n2) {

unsigned carry=0; unsigned value; binary res=\"0\";

for(int i=15; i>=0; i--) {

value=(n1.bits[i]=='0'?0:1)+(n2.bits[i]=='0'?0:1)+carry; res.bits[i]=(value%2==0?'0':'1'); carry=value>>1; }

return res; }

binary operator -(binary n1, binary n2) {

unsigned borrow=0; int value;

binary res=\"0\";

for(int i=15; i>=0; i--) {

value=(n1.bits[i]=='0'?0:1)-(n2.bits[i]=='0'?0:1)+borrow; res.bits[i]=(value==-1||value==1?'1':'0');

borrow=(value==-1||borrow!=0&&(value==0||value==1)?1:0); }

return res; }

binary operator |(binary n1,binary n2) {

int value;

binary res=\"0\";

for(int i=15; i>=0; i--) {

value=(n1.bits[i]=='0'?0:1)+(n2.bits[i]=='0'?0:1); if (value==0) res.bits[i]='0';

else res.bits[i]='1'; }

return res; }

binary operator &(binary n1,binary n2) {

int value;

binary res=\"0\";

for(int i=15; i>=0; i--) {

value=(n1.bits[i]=='0'?0:1)+(n2.bits[i]=='0'?0:1); if (value==2) res.bits[i]='1'; else res.bits[i]='0'; }

return res; }

binary binary::operator ~() {

int i;

for(i=0;i<=15;i++) {

if(bits[i]=='0') bits[i]='1'; else break; }

for(i=15;i>=0;i--) {

if(bits[i]=='1') bits[i]='0'; else bits[i]='1'; }

return bits;}

binary::operator int() {

unsigned value=0;

for(int i=0; i<=15; i++)

value=( value*2)+(bits[i]=='0'?0:1); return value;} void binary::print() {

char str[17];

strncpy(str,bits,16); str[16]='\\0';

cout<binary n1=\"1011\"; binary n2=int(n1)+8; binary n3=n2|n1; binary n4=n1&n2;

binary n5=\"101011\"; ~n5;

n1.print(); n2.print(); n3.print(); n4.print(); n5.print();

cout<getch(); return 1; }

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务