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< 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 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;i for(j=0;j 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;i 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;i 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
本站由北京市万商天勤律师事务所王兴未律师提供法律服务