类String的构造函数、拷贝构造函数、析构函数、赋值函数
2015-09-18 09:27
330 查看
已知类String的原型为:
class String
{
public:
String(const char *str=NULL); //普通构造函数
String(const String &other); //拷贝构造函数
~String(void); //析构函数
String & operator =(const String &other); //赋值函数
private:
char *m_data; //用于保存字符串
};
编写String的上述4个函数
/* 析构函数 */
String::~String(void)
{
delete [] m_data;//由于m_data是内部数据类型,也可以写成delete m_data;
}
/* 普通构造函数 */
String::String(const char *str)
{
if(str==NULL)
{
m_data = new char[1];
*m_data = '\0';
}
else
{
int len=strlen(str);
m_data= new char[len+1];
strcpy(m_data,str);
}
}
/* 拷贝构造函数 */
String::String(const String &other)
{
int len=strlen(other.m_data);
m_data= new char[len+1];//m_data 只有申请了空间才有指向,没申请之前只是一个指针,不指向特定内存空间
if(m_data!=NULL)
strcpy(m_data,other.m_data);
}
/* 赋值函数 */
String & String:: operator =(const String &other)
{
if(this ==&other)
return *this;
delete [] m_data;// 释放原有的内存资源
int len=strlen(other.m_data);
m_data= new char[len+1];// 分配新的内存资源
if(m_data!=NULL)
strcpy(m_data,other.m_data);
return *this;//返回本对象的引用
}
class String
{
public:
String(const char *str=NULL); //普通构造函数
String(const String &other); //拷贝构造函数
~String(void); //析构函数
String & operator =(const String &other); //赋值函数
private:
char *m_data; //用于保存字符串
};
编写String的上述4个函数
/* 析构函数 */
String::~String(void)
{
delete [] m_data;//由于m_data是内部数据类型,也可以写成delete m_data;
}
/* 普通构造函数 */
String::String(const char *str)
{
if(str==NULL)
{
m_data = new char[1];
*m_data = '\0';
}
else
{
int len=strlen(str);
m_data= new char[len+1];
strcpy(m_data,str);
}
}
/* 拷贝构造函数 */
String::String(const String &other)
{
int len=strlen(other.m_data);
m_data= new char[len+1];//m_data 只有申请了空间才有指向,没申请之前只是一个指针,不指向特定内存空间
if(m_data!=NULL)
strcpy(m_data,other.m_data);
}
/* 赋值函数 */
String & String:: operator =(const String &other)
{
if(this ==&other)
return *this;
delete [] m_data;// 释放原有的内存资源
int len=strlen(other.m_data);
m_data= new char[len+1];// 分配新的内存资源
if(m_data!=NULL)
strcpy(m_data,other.m_data);
return *this;//返回本对象的引用
}
相关文章推荐
- 第三周项目一(2)
- Android进阶之动态加载图片(AsyncTask异步加载并显示进度条)
- 数据结构分类
- 路由表详解
- Maven依赖关系中Scope的作用
- 链表基础
- 算法导论 循环单链表
- vi或vim快捷键
- Design Pattern 之 策略模式
- Android异步更新UI的方式之使用Handler的post(Runnabel r)方法
- 第三周【项目1 - 顺序表的基本运算】
- 在iOS9中,苹果将原http协议改成了https协议,使用 TLS1.2 SSL加密请求数据。如何解决报错
- SpringMVC与Activiti网页流程设计器整合
- JAVA中字节流和字符流的区别 。
- 第三周项目2—建立“顺序表”算法库
- 通过discuzX2.5 社区与java 的单点登录的实现(测试)
- Spring与Hibernate实现增删改查两方法
- Tomcat
- tp增删改查
- android EditText中的inputType