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 }

 

posted on 2014-02-24 19:51  Andy Niu  阅读(371)  评论(0编辑  收藏  举报