您的位置:首页 > 其它

String类的实现

2014-02-24 19:51 381 查看
1、在类中可以访问private成员包括两层含义:可以访问this指针的private成员;可以访问同类对象的private成员。

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

String类的定义(头文件):

#ifndef String_H_
#define String_H_
class String
{
public:
String(const char* src);
String(const String& rhs);
String& operator=(const String& rhs);
~String();
private:
char* _data;
};
#endif


String类的实现(cpp文件):

#include "String.h"
#include <iostream>
String::String(const char* src)
{
if(src==NULL)
{
_data = new char[1];
_data[0]='\0';
}
else
{
_data = new char[strlen(src)+1];
strcpy(_data,src);
}
}

String::String(const String& rhs)
{
_data = new char[strlen(rhs._data)+1];
strcpy(_data,rhs._data);
}

String& String::operator=(const String& rhs)
{
if(this == &rhs)
{
return *this;
}
delete[]_data;
_data = new char[strlen(rhs._data)+1];
strcpy(_data,rhs._data);
return *this;
}

String::~String()
{
delete []_data;
}


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

#include "String.h"
#include <iostream>
String::String(const char* src)
{
if(src==NULL)
{
_data = (char*)malloc(1);
_data[0]='\0';
}
else
{
_data = (char*)malloc(strlen(src)+1);
strcpy(_data,src);
}
}

String::String(const String& rhs)
{
_data = (char*)malloc(strlen(rhs._data)+1);
strcpy(_data,rhs._data);
}

String& String::operator=(const String& rhs)
{
if(this == &rhs)
{
return *this;
}
free(_data);
_data = (char*)malloc(strlen(rhs._data)+1);
strcpy(_data,rhs._data);
return *this;
}

String::~String()
{
free(_data);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: