c++类的多态性的实现实验3报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验报告
一、实验名称:类的多态性的实现
二、实验目的:
1)掌握用成员函数重载运算符的方法
2)掌握用友元函数重载运算符的方法
三、实验内容:
模拟STL库中string类的功能,编写MyString类,至少实现字符串间的赋值、比较(包括>、<、=、!=)和字符串间的”+”(连接)操作,同时能通过下面列举的形式对字符串对象进行初始化。

如:MyString str1(“I am ”),str2=“a student”;
if(str1>str2) cout<<“larger\n”;
if(str1<str2) cout<<“smaller\n”;
if(str1==str2) cout<<“equal\n”;
if(str1!=str2) cout<<“unequal\n”;
MyString str3=str1+str2;
思考
在为字符串分配空间时采用动态还是静态的分配方式,各有什么优缺点。

四、实验结果:
#include<string.h>
#include<iostream.h>
class MyString{
public:
MyString(char *s="")
{ str=new char[strlen(s)+1];
strcpy(str,s);
return;
}
MyString(const MyString& other)
{ str=new char[strlen(other.str)+1];
strcpy(str,other.str);
return;
}
int operator >(MyString& right) //重载>运算符
{ int n;
n=strcmp(str,right.str);
if(n>0)return 1;
else return 0;
}
int operator <(MyString& right) //重载<运算符
{
int n=strcmp(str,right.str);
if(n<0)return 1;
else return 0;
}
int operator ==(MyString& right) //重载==运算符 {
int n=strcmp(str,right.str);
if(n==0)return 1;
else return 0;
}
int operator !=(MyString& right) //重载!=运算符 {
int n=strcmp(str,right.str);
if(n!=0)return 1;
else return 0;
}
MyString operator +(MyString& right) //重载+运算符 {
MyString temp;
temp.str=strcat(str,right.str);
return temp;
}
~MyString() // 析构函数
{ return; }
char* getstr() //取类中字符
{ return str; }
private :
char *str;
};
void main()
{
MyString str1("I am "),str2="a student";
if(str1>str2) cout<<"larger\n";
if(str1<str2) cout<<"smaller\n";
if(str1==str2) cout<<"equal\n";
if(str1!=str2) cout<<"unequal\n";
MyString str3=str1+str2;
cout<<str3.getstr()<<endl; //输出str3类中字符 return;
}
[运行结果]
思考题:
字符串静态分配
优点:使用方便
缺点:定义的数组过大,会浪费大量的内存空间,定义的数组不够大时,可能引起下标越界错误,甚至导致严重后果。

字符串动态分配
优点:1、不需要预先分配存储空间;
2、分配的空间可以根据程序的需要扩大或缩小。

缺点:1、忘记了释放内存,造成内存泄露
2、内存分配未成功,尚未初始化却使用了它
五、心得体会:
这次是C++第三次实验,开始的时候在类中定义了友元函数,老师说这个在使用的时候会与一些函数模板等起冲突,后来重新进行了定义。

还有就是在定义字符串类型的时候,用了string类型,而运用到的strcmp、strcpy又是c语言里面的,重新定义为指向char的指针类型。

这次实验加深了我对成员函数重载运算符、友元函数重载运算符的认识。

这次实验很有收获!!。

相关文档
最新文档