C++模拟string类

来源:互联网 发布:编程语言实现模式 pdf 编辑:程序博客网 时间:2024/05/17 12:56
#include<string> 

#include<iostream> 

using namespace std;

class String

{

private:

                  char*str;

public:

                  String(){}

                  String(constchar *s):str( new char[strlen(s) + 1])

                  {

                                     strcpy(str,s);

                  }

                  String(constString &ob):str ( new char[strlen(ob.str) + 1])

                  {

                                     strcpy(str,ob.str);

                  }

                  ~String()

                  {

                                     delete[]str;

                                     str= NULL;

                  }

                  String&operator = (const String &ob)

                  {

                                     if(strcmp(str, ob.str) == 0)

                                                        return*this;

                                     delete[]str;

                                     str= new char[strlen(ob.str) + 1];

                                     strcpy(str,ob.str);

                                     return*this;

                  }

 

                  Stringoperator +(String &ob)

                  {

                                     Stringtemp;

                                     temp.str= new char[strlen(str) + strlen(ob.str) + 1];

                                     strcat(temp.str,str);

                                     strcat(temp.str,ob.str);

                                     returntemp;

                  }

                  friendostream& operator<<(ostream &output, const String &ob)

                  {

                                     output<< ob.str;

                     return output;

                  }

                  friendistream& operator>>(istream &input, const String &ob)

                  {

                                     input>> ob.str;

                                     returninput;

                  }

                  charoperator[](size_t i)

                  {

                                     returnstr[i];

                  }

};

 

int main()

{

                  Strings1("666666");

                  cout<< s1 << endl;

                  Strings2("999999");

                  cout<< s2 << endl;

                  Strings3;

                  s3= s2 + s1;

                  cout<< s3 << endl;

                  cout<< s2[2] << endl;

                  return0; 

                  

}

 

 

 

1.使用初始化列表的好处:

1.为初始化基类传递参数,使其能够有参初始化基类。 

2.提高组合类成员的初始化效率。因为初始化列表比把组合成员放在构造函数中初始化,省略了调用组合成员对象的赋值构造函数,同时也省略了因为显式调用组合成员的构造函数而生成的临时对象。

 

2.const好处

1.当实参的类型比较大时,复制开销很大(形参初始化时),引用会避免复制。(这在传递类对象时比较常用)

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

3.相比非const引用形参,更具实用性:形参可以使用const对象初始化,可使用字面值或右值表达式的实参来初始化

 

3.引用(&)的好处

1.C++中参数传递过程中,是值拷贝的,如果参数大,或者函数调用频繁用引用会大大提高效率,引用只是别名不会进行值复制的。

2.引用的功能指针都能实现,不过指针不安全,写的时候一不注意就是BUG,用引用安全

原创粉丝点击