自实现 myString 类主要目的是剖析系统内部的 string 类的一些实现方法以及加强对类封装、运算符重载等特性的掌握。其中包含了几项非常重要的功能实现。
- 使用构造器创建对象。
- 拷贝构造器创建对象。
- 赋值运算符重载构造对象。
- []运算符重载构造对象数组。
- ==运算符重载判断对象是否相等。
- 运算符重载实现对象相加。
- >> << 流输入输出运算符实现打印和输入。
具体的实现代码分三个部分,一个 MyString.h 文件,包含类的声明和结构。一个 MyString.cpp 文件,包含类的成员及友元函数实现。最终是一个 main.cpp 来测试我们自己的 MyString 类是否可以正常使用。
【myString.h】
代码语言:javascript复制#pragma once
#include <iostream>
class CMyString
{
public:
// 构造器
CMyString(char* str = NULL);
// 拷贝构造器原型,another为传递进来的同类对象
CMyString(const CMyString & another);
// 赋值运算符重载,系统会提供默认,但同样是等位拷贝
CMyString& operator=(const CMyString & another);
// []运算符重载
char operator[](int idx);
// ==运算符重载
bool operator==(const CMyString& another);
// 运算符重载
CMyString operator (const CMyString& another);
// 流输入输出
friend std::ostream& operator<<(std::ostream& os, CMyString& another);
friend std::istream& operator<<(std::istream& is, CMyString& another);
~CMyString(void);
char* c_str();
private:
char* m_str;
};
【myString.cpp】
代码语言:javascript复制#include "MyString.h"
#include <cstring>
CMyString::CMyString(char* str)
{
if (str)
{
int len = strlen(str);
m_str = new char[len 1];
strcpy_s(m_str, len 1, str);
}
else
{
m_str = new char[1];
*m_str = '