欢迎来到天天文库
浏览记录
ID:1111122
大小:222.91 KB
页数:8页
时间:2017-11-07
《自己动手编写string类》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、自己动手编写string类题记:人们对事物的恐惧往往源自不了解,如果你能把它写出来,还怕不会用吗?对于那些对C++标准库中的string不甚了解的读者来说,这篇文章的名称可能会引起一些混淆。标准库中的string并不是一个独立的类,而是basic_string模板类的一个特化版本:typedefbasic_string,allocator>string;我们今天要做的事情是,模仿标准库string的行为,编写一个属于自己的简单的string类。为了与标准库中的string相区分,我们将自己编写的类命名为MyString。声明篇数据成员
2、方面我们需要一个char型指针来保存字符串,还需要一个size_t型变量来保存字符串的长度。显然,它们是应该被封装的,我们将它们的权限设置为private。classMyString{private:size_tstrLength;char*p_str;};下面我们来声明成员函数,当然,还有一些非成员函数。想一想我们定义一个string变量有哪几种方式,一般情况下,以下四种方式比较常见://调用默认构造函数strings1;//将s2初始化为s1的一个副本strings2(s1);orstrings2=s1;//将s3初始化为一个字符串字面值副本strings3("hello");orstr
3、ings3="hello";//将s4初始化为字符'a'的n个副本strings4(n,'a');下面给出相应的声明://构造函数MyString();MyString(constMyString&);MyString(constchar*);MyString(constsize_t,constchar);类中存在指针数据成员,我们当然需要自己定义一个析构函数。//析构函数~MyString();一些基本的属性。size_tlength();//字符串的长度boolempty();//字符串是否为空string中有个c_str()成员函数,返回C风格字符串的指针,我们也加上这个函数。cons
4、tchar*c_str();//返回C风格字符串的指针下面该写操作符了,我们知道,string支持的操作符特别多,这些都是通过操作符的重载实现的。//读写操作符friendostream&operator<<(ostream&,constMyString&);friendistream&operator>>(istream&,MyString&);//‘+’操作符friendMyStringoperator+(constMyString&,constMyString&);//比较操作符friendbooloperator==(constMyString&,constMyString&);fr
5、iendbooloperator!=(constMyString&,constMyString&);friendbooloperator<(constMyString&,constMyString&);friendbooloperator<=(constMyString&,constMyString&);friendbooloperator>(constMyString&,constMyString&);friendbooloperator>=(constMyString&,constMyString&);//下标操作符char&operator[](constsize_t);constch
6、ar&operator[](constsize_t)const;//赋值操作符MyString&operator=(constMyString&);//'+='操作符MyString&operator+=(constMyString&);有几个问题需要说明。1、IO操作符不可以定义为类的成员函数,否则,左操作数只能是该类类型的对象。MyStrings;s<7、况,否则,类的const对象将无法使用下标。最后,再写一些操作函数。标准库string的操作函数为数众多,且存在大量的重载版本。这里出于篇幅考虑,选择几个代表性的函数来实现。//子串操作MyStringsubstr(size_t,size_t);//添加操作MyString&append(constMyString&);//插入操作MyString&insert(size_t,constMyString&);
7、况,否则,类的const对象将无法使用下标。最后,再写一些操作函数。标准库string的操作函数为数众多,且存在大量的重载版本。这里出于篇幅考虑,选择几个代表性的函数来实现。//子串操作MyStringsubstr(size_t,size_t);//添加操作MyString&append(constMyString&);//插入操作MyString&insert(size_t,constMyString&);
此文档下载收益归作者所有