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[];
_data[]='\0';
}
else
{
_data = new char[strlen(src)+];
strcpy(_data,src);
}
} String::String(const String& rhs)
{
_data = new char[strlen(rhs._data)+];
strcpy(_data,rhs._data);
} String& String::operator=(const String& rhs)
{
if(this == &rhs)
{
return *this;
}
delete[]_data;
_data = new char[strlen(rhs._data)+];
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();
_data[]='\0';
}
else
{
_data = (char*)malloc(strlen(src)+);
strcpy(_data,src);
}
} String::String(const String& rhs)
{
_data = (char*)malloc(strlen(rhs._data)+);
strcpy(_data,rhs._data);
} String& String::operator=(const String& rhs)
{
if(this == &rhs)
{
return *this;
}
free(_data);
_data = (char*)malloc(strlen(rhs._data)+);
strcpy(_data,rhs._data);
return *this;
} String::~String()
{
free(_data);
}