用String类的实验,说明拷贝构造函数、重载等号赋值函数、和普通构造函数的区别
看程序员面试宝典,对其中的一个问题很感兴趣。就是编写一个String的构造函数、析构函数和赋值函数。这个问题虽然很简单,但是这些简单的问题中,包含了许多我们需要了解的基础知识。我的答案如下
//String.h
#define NULL 0
class String
{
public:
String(constchar *str = NULL);
String(constString &other);
~String(void);
String operator=(const String &other);
intGetLength();
private:
char*m_data;
};
这里要注意运算符等号的重载GetLength()函数是编写,用来测试我String类的是否正确。
以上函数声明包含了String类的一些必备操作功能。
最为简单的拷贝构造函数
String(const String &other);
普通构造函数
String(const char *str =NULL);
重载等号赋值函数
Stringoperator =(constString &other);
具体函数源文件如下:
//String.cpp
#include <iostream>
using namespace std;
#include "String.h"
String::~String()
{
if(NULL!= m_data)
{
delete[] m_data;
}
}
String::String(const char *str)
{
if(NULL== str)
{
/*m_data= new char[1];
*m_data ='\0';*/
m_data= NULL;
}
else
{
intlength = strlen(str);
m_data = new char[length+1];
strcpy(m_data,str);
}
}
String::String(const String &other)
{
intlength = strlen(other.m_data);
m_data = new char[length+1];
strcpy(m_data,other.m_data);
}
String String::operator =(constString &other)
{
if(this == &other)
return*this;
delete[] m_data;
intlength = strlen(other.m_data);
m_data = new char[length+1];
strcpy(m_data,other.m_data);
return*this;
}
int String::GetLength()
{
if(NULL== m_data)
{
return0;
}
else
{
intlength = strlen(m_data);
returnlength+1;
}
}
测试用的main函数,打上断点即可看到类是否正确。
//main.cpp
#include "String.h"
void main(void)
{
String String1("J");
intlength=String1.GetLength();
String String2;
length=String2.GetLength();
String2 = String1;
length=String2.GetLength();
// String S
}