String类的实现
2014-02-24 19:51
381 查看
1、在类中可以访问private成员包括两层含义:可以访问this指针的private成员;可以访问同类对象的private成员。
2、这里的String可以认为是个资源管理类,内部有个char指针,在堆上分配对象,而且对于String应该是深复制,不是复制指针,而是要复制指针指向的内容。
String类的定义(头文件):
String类的实现(cpp文件):
上面的String实现,使用了new char在堆上分配内存,当然也可以使用malloc,需要注意的是,这种情况下,要使用free释放内存。而且,要注意的是,new和delete是关键字,而malloc和free是方法。
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); }
相关文章推荐
- 用简单的修改数据理解三层概念
- eclipse如何快速删除代码中的空行?
- zoj 1088 约瑟夫环
- 线程和进程的区别
- iOS- UIPickerView餐厅点餐系统
- [查找最大最小]ZOJ 2970 Faster, Higher, Stronger
- 动态下载苹果提供的多种中文字体
- 网线水晶头接法图解
- hdu2149Public Sale (巴什博弈)
- php设置和获取变量类型
- Openipmp安装 linux
- Git 系列之一:版本控制的概念、分布式、Git 简介及其工作流程
- Java Exception: 六种异常处理的陋习
- 程序员必看的十大电影
- 测试网口故障的方法-回环水晶头及实验方法
- Wp8—LongListSelector控件使用
- System timers granularity
- Git 系列之一:版本控制的概念、分布式、Git 简介及其工作流程
- 存储故障导致ESXI主机变慢
- 字节与字符,字符与字符集