类String的头文件:
<span style="font-size:18px;">#pragma once
#include <stdlib.h>
class String
{
public:
//普通构造函数
String(const char*str = NULL);//C++ 可以有默认参数
//复制构造函数
String(const String& other);
//赋值函数
String& operator=(const String& other);
//析构函数
~String(void);
private:
char*m_data;
};</span>
类String的cpp文件:
<span style="font-size:18px;">#include "String.h"
#include "iostream"
using namespace std;
String::String(const char*str /* = NULL */){
cout << "构造函数" << endl;
if (str==NULL)
{
m_data = new char[1];
*m_data = '\0';
}
else
{
int length = strlen(str);
m_data = new char[length+1];
strcpy(m_data, str);
}
}
String::String(const String& other){
cout << "复制构造函数" << endl;
int length = strlen(other.m_data);
m_data = new char[length + 1];
strcpy(m_data, other.m_data);
}
String & String::operator=(const String& other){
cout << "赋值函数" << endl;
//检查自赋值
if (this==&other)
{
return *this;
}
//释放原有的资源
delete[] m_data;
//分配新的资源并复制内容
int length = strlen(other.m_data);
m_data = new char[length + 1];
strcpy(m_data, other.m_data);
//返回本对象的引用
return *this;
}
String::~String()
{
cout << "析构函数" << endl;
delete[] m_data;
}</span>
使用:
#include "String.h"
int main(){
String s1("Hello");//构造函数
String s2 = s1; //调用复制构造函数
String s3; //无参构造函数
s3 = s1; //调用赋值函数
return 0;
}
运行结果: