您好,欢迎来到筏尚旅游网。
搜索
您的当前位置:首页c++实验三实验报告

c++实验三实验报告

来源:筏尚旅游网
实验三实验报告

1.实验目的及要求

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

2.实验设备

计算机、Microsoft Visual C++

3.实验内容

(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<[基本要求]

阅读下列程序,根据题意要求在 处填上合适的内容完成程序。 上机录入、调试上面程序。

运行程序,记录并分析运行结果是否正确。

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

4.解答:

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

2. #include #include using namespace std; class A { public:

void getdata()//输入数组元素 { cout<<\"请输入集合中的元素:\"; gets(data);

}

void print( )//输出数组元素 {

puts(data); }

A operator +(A s1) //重载\"+\"实现字符串的并集运算 { A temp;

count=strlen(data); s1.count=strlen(s1.data); int i=0,j=0,k=0,x=0; for(i=0;itemp.data[x]=data[i]; x++; }

for(j=0;jfor(i=0;iif(s1.data[j]==data[i]) break;

else if(s1.data[j]!=data[i]) k++; if(k==count) {

temp.data[x]=s1.data[j]; x++; } } }

temp.data[x]='/0'; return temp; }

A operator *(A s1) //重载“*”实现字符串的交集运算 {

A temp;

count=strlen(data); s1.count=strlen(s1.data); int i=0,j=0,x=0; for(i=0;ifor(j=0;jif(data[i]==s1.data[j]) {

temp.data[x]=data[i]; x++; } } }

temp.data[x]='/0'; return temp; }

A operator -(A s1) //重载“-”实现字符串的差集运算 {

A temp;

count=strlen(data);

s1.count=strlen(s1.data); int i=0,j=0,k=0; static int x=0; for(i=0;ifor(j=0;jif(data[i]==s1.data[j]) break;

else if(data[i]!=s1.data[j]) k++;

if(k==s1.count) {

temp.data[x]=data[i]; x++; } } }

temp.data[x]='/0'; return temp; }

private:

char data[100]; int count; };

void main() {

A s1,s2,s3,s4; s1.getdata(); s2.getdata(); s3.getdata();

cout<<\"并集:\"; s4=s1+s2+s3; s4.print(); cout<<\"交集:\"; s4=s1*s2*s3; s4.print(); cout<<\"差集:\"; s4=s1-s2; s4.print();

}

5.代码测试:

报告者:林铭霞 2012/4/25

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

Copyright © 2019- efsc.cn 版权所有 赣ICP备2024042792号-1

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

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