String类的实现

1、在类中可以访问private成员包括两层含义:可以访问this指针的private成员;可以访问同类对象的private成员。

2、这里的String可以认为是个资源管理类,内部有个char指针,在堆上分配对象,而且对于String应该是深复制,不是复制指针,而是要复制指针指向的内容。

String类的定义(头文件):

 1 #ifndef String_H_

 2 #define String_H_

 3 class String

 4 {

 5 public:

 6  String(const char* src);

 7  String(const String& rhs);

 8  String& operator=(const String& rhs);

 9  ~String();

10 private:

11  char* _data;

12 };

13 #endif

String类的实现(cpp文件):

 1 #include "String.h"

 2 #include <iostream>

 3 String::String(const char* src)

 4 {

 5  if(src==NULL)

 6  {

 7   _data = new char[1];

 8   _data[0]='\0';

 9  }

10  else

11  {

12   _data = new char[strlen(src)+1];

13   strcpy(_data,src);

14  }

15 }

16 

17 String::String(const String& rhs)

18 {

19  _data = new char[strlen(rhs._data)+1];

20  strcpy(_data,rhs._data);

21 }

22 

23 String& String::operator=(const String& rhs)

24 {

25  if(this == &rhs)

26  {

27   return *this;

28  }

29  delete[]_data;

30  _data = new char[strlen(rhs._data)+1];

31  strcpy(_data,rhs._data);

32  return *this;

33 }

34 

35 String::~String()

36 {

37  delete []_data;

38 }

上面的String实现,使用了new char在堆上分配内存,当然也可以使用malloc,需要注意的是,这种情况下,要使用free释放内存。而且,要注意的是,new和delete是关键字,而malloc和free是方法。

 1 #include "String.h"

 2 #include <iostream>

 3 String::String(const char* src)

 4 {

 5  if(src==NULL)

 6  {

 7   _data = (char*)malloc(1);

 8   _data[0]='\0';

 9  }

10  else

11  {

12   _data = (char*)malloc(strlen(src)+1);

13   strcpy(_data,src);

14  }

15 }

16 

17 String::String(const String& rhs)

18 {

19  _data = (char*)malloc(strlen(rhs._data)+1);

20  strcpy(_data,rhs._data);

21 }

22 

23 String& String::operator=(const String& rhs)

24 {

25  if(this == &rhs)

26  {

27   return *this;

28  }

29  free(_data);

30  _data = (char*)malloc(strlen(rhs._data)+1);

31  strcpy(_data,rhs._data);

32  return *this;

33 }

34 

35 String::~String()

36 {

37  free(_data);

38 }

 

你可能感兴趣的:(String类)