模拟实现string

1.初始化成员列表高效在哪里

对类类型来说,用初始化列表少了一次调用默认构造函数的过程,这对于数据密集型的类来说,是非常高效的。

2.形参为const引用的好处

a.当实参的类型比较大时,复制开销很大,引用会“避免复制”。

b.“避免修改实参”,当使用引用时,如果调用者希望只使用实参并不修改实参,则const可以避免使用该引用修改实参。

3.使用&的好处

形参是对象的引用,是通过传地址的方法传递参数的,对函数形参的改变就是对实参的改变,如果函数的形参是对象,则是通过传值的方法传递参数的,函数体内对形参的修改无法传到函数体外。

4.模拟实现string

#include<iostream>
#include<string>
using namespace std;
class Mystring
{private:
char *_s;
public:
Mystring(const char *s=" "):_s(new char[strlen(s)+1)])
{
strcpy(_s,s);
}
Mystring(const Mystring &a):_s(new char[strlen(a._s)+1])
{
strcpy(_s,a._s);
}
~Mystring()
{
if(_s)
{
delete[]_s;
_s=NULL;
}
}
friend osteram& opreator<<(ostream &os,Mystring a);
Mystring& operator=(const Mystring a);
char& operator[](size_t i);
};
osteram& opreator<<(ostream &os,Mystring a)
{
os<<a._s;
return os;
}
Mystring& Mystring::operator=(const Mystring a)
{
if(this !=&a)
{
if(_s)
{_s=NULL;
}
_s=new char[strlen(a._s)+1];
strcpy(_s,a._s);
}
return *this;
}
char& Mystring::operator[](size_t i)
{
return _s[i];
}
int main()
{
Mystring arr;
Mystring brr;
Mystring crr="abcdefg";
arr=crr;
brr=crr;
cout<<arr<<endl;
cout<<brr<<endl;
arr[5]='h';
cout<<arr<<endl;
}





猜你喜欢

转载自blog.csdn.net/huaijiu123/article/details/74385604
今日推荐