C++ String类的实现
String类的实现是面向对象的应用,其中涉及大量的 C++ 语法,经常以面试题的形式出现,很能考察面试者的 C++ 功底。本文实现基本的 普通构造函数、拷贝构造函数、析构函数、赋值函数、输出运算符重载
下面的 类的原型、类的实现和 main函数作者均在 g++编译器下实践过,编译运行没有问题。
类的原型
string.h
#ifndef _STRING
#define _STRING
using namespace std;
class String
{
public:
String(const char *str = NULL);// 普通构造函数
String(const String &str);// 拷贝构造函数
~String(void);// 析构函数
String & operator = (const String &str);// 赋值函数
friend ostream& operator << (ostream &os, String &str);//输出
private:
char *m_data;
};
#endif
类的实现
string.cpp
#include <iostream>
#include <cstring>
#include "string.h"
String::String(const char *str)
{
if (str == NULL)
{
m_data = new char[1];// 得分点:对空字符串自动申请存放结束标志'\0'的,加分点:对m_data加NULL判断
*m_data = '\0';
}
else
{
int length = strlen(str);
m_data = new char[length + 1];// 若能加 NULL 判断则更好
strcpy(m_data, str);
}
}
// String的析构函数
String::~String(void)
{
delete[] m_data; // 或delete m_data;
}
//拷贝构造函数
String::String(const String &str)// 得分点:输入参数为const型
{
int length = strlen(str.m_data);
m_data = new char[length + 1];// 若能加 NULL 判断则更好
strcpy(m_data, str.m_data);
}
//赋值函数
String & String::operator = (const String &str) // 得分点:输入参数为const型
{
if (this == &str)//得分点:检查自赋值
return *this;
if (m_data)
delete[] m_data;//得分点:释放原有的内存资源
int length = strlen(str.m_data);
m_data = new char[length + 1];//加分点:对m_data加NULL判断
strcpy(m_data, str.m_data);
return *this;//得分点:返回本对象的引用
}
ostream& operator<<(ostream &os, String &str)//输出
{
os << str.m_data;
return os;
}
类的测试函数
main.cpp
#include <iostream>
#include "string.h"
using namespace std;
int main(int argc, char* argv[])
{
String S = "abcdefg";
String S1(S);
String S2 = S;
cout << "S = " << S << ", S1 = " << S1 << ", S2 = " << S2 << endl;
return 0;
}