创建一个StringClass类 存储需要用到的成员变量和 需要实现的函数
StringClass.h
#pragma once
#define EXTRA_SPACE 50
#include <iostream>
class StringClass
{
public://公有声明
StringClass(const char* s);//构造函数-字符串初始化
StringClass(int n, char c);//构造函数-n个字符进行初始化
~StringClass();//析构函数
public://函数实现
StringClass(const StringClass& str); // 拷贝构造函数
bool operator== (const StringClass& str); //重载比较运算符==
const StringClass& operator=(const StringClass& str); //运算符重载赋值=
private:
int c_strlen;//字符串长度
int c_size;//字符串空间大小
char* p_buff;//保存字符串的首地址
};
实现类 StringClass.cpp
#include "StringClass.h"
using namespace std;
StringClass::StringClass(const char* s)//由字符串进行构造
{
c_strlen = strlen(s);//获取到字符串的长度
p_buff = new char[c_strlen + EXTRA_SPACE];//分配内存空间大小,多加50防止溢出问题
memcpy(p_buff, s, c_strlen);//memcpy进行将目标字符串按照指定长度拷贝到新地址中
c_size = c_strlen + EXTRA_SPACE;//存储新地址的空间大小
}
StringClass::StringClass(int n, char c)//构造由n个一种字符组成的字符串进行构造
{
c_strlen = n; // 字符串实际长度
p_buff = new char[n + EXTRA_SPACE];//开辟内存空间
for (int i = 0; i < n; i++)//循环赋值
{
p_buff[i] = c;
}
c_size = n + EXTRA_SPACE;//内存空间大小
}
StringClass::~StringClass()
{
if (p_buff)//释放指针
{
delete[] p_buff;
p_buff = nullptr;
}
}
StringClass::StringClass(const StringClass& str)
{
if (*this == str)//如果一致 则不需要赋值
{
return;
}
if (p_buff)//判断p_buff是否为空 ,如果不是销毁
{
delete[] p_buff;
p_buff = NULL;
}
//开辟空间和赋值
c_strlen = str.c_strlen;
p_buff = new char[str.c_strlen + EXTRA_SPACE];
memcpy(p_buff,str.p_buff,c_strlen);
c_size = c_strlen + EXTRA_SPACE;
}
bool StringClass::operator==(const StringClass & str)
{
if(str.c_strlen == c_strlen && str.c_size == c_size )//先判断长度
{
for (int i = 0; i < c_strlen; i++)//逐个判断字符
{
if (p_buff[i] != str.p_buff[i])
{
return false;
}
}
return true;
}
return false;
}
const StringClass & StringClass::operator=(const StringClass& str)
{
// TODO: 在此处插入 return 语句
if (*this == str)//如果当前this与str一致,则不用重复赋值,避免自赋值
{
return *this;
}
if (p_buff) //如果p_buff有值 则销毁
{
delete[] p_buff;
p_buff = NULL;
}
//开辟空间赋值
c_size = str.c_strlen + EXTRA_SPACE;
c_strlen = str.c_strlen;
p_buff = new char[c_size];
memcpy(p_buff, str.p_buff, c_strlen);
}