• 自实现部分string类的功能


    #define _CRT_SECURE_NO_WARNINGS
    #include<iostream>
    using namespace std;
    class MyString
    {
    public:
        MyString::MyString();         //无参构造
        MyString(const char* str );      //默认参数
        MyString(const MyString& other);   //拷贝构造
        MyString& operator=(const MyString& other);  //重载等号(参数不同)
        MyString& operator=(const char* str);      //重载等号(参数不同)
        ~MyString();              //析构函数
        char& operator[](unsigned int index);      //重载[]号
    
        MyString& operator+=(const MyString& other);  //重载+=号
        friend MyString operator+(const MyString& s1, const MyString& s2);  //重载加号;用全局的友元函数
        friend ostream& operator<<(ostream& os, const MyString& str);      //重载左移操作符;用全局函数
       friend istream
    & operator>>(istream& is, MyString& str);          //重载右移操作符,用全局函数 private: char* m_str; }; MyString::MyString() { m_str = new char[1]; m_str = ''; } MyString::MyString(const char* str) //默认参数 { if (str == NULL) { m_str = new char[1]; m_str = ''; } else { int len = strlen(str); m_str = new char[len + 1]; strcpy(m_str, str); } } MyString::MyString(const MyString& other) { int len = strlen(other.m_str); m_str = new char[len + 1]; strcpy(m_str, other.m_str); } MyString& MyString::operator=(const MyString& other) { if (&other == this) return *this; if (m_str != NULL) { delete[]m_str; } int len = strlen(other.m_str); m_str = new char[len + 1]; strcpy(m_str, other.m_str); return *this; } MyString& MyString::operator=(const char* str) { if (m_str != NULL) { delete[]m_str; } if (str == NULL) { m_str = new char[1]; m_str = ''; } else { int len = strlen(str); m_str = new char[len + 1]; strcpy(m_str, str); } return *this; } MyString::~MyString() { if (m_str != NULL) { delete[]m_str; m_str = NULL; } } char& MyString::operator[](unsigned int index) { unsigned int len = strlen(m_str); if (index > len) return m_str[len]; return m_str[index]; } MyString& MyString::operator+=(const MyString& other) { int len = strlen(m_str) + strlen(other.m_str); char *newstr = new char[len + 1]; strcpy(newstr, m_str); strcat(newstr, other.m_str); if (m_str != NULL) { delete[]m_str; } m_str = newstr; return *this; } MyString operator+(const MyString& s1, const MyString& s2) { int len = strlen(s1.m_str) + strlen(s2.m_str); char *newstr = new char[len + 1]; strcpy(newstr, s1.m_str); strcat(newstr, s2.m_str); MyString My(newstr); return My; } ostream& operator<<(ostream& os, const MyString& str) { os << str.m_str << endl; return os; } istream& operator>>(istream& is, MyString& str) { char newstr[1024]; is >> newstr; int len = strlen(newstr); if (str.m_str != NULL) { delete []str.m_str; } str.m_str = new char[len + 1]; strcpy(str.m_str, newstr); return is; } //测试代码 void test11() { MyString m1; MyString m2("nihao"); MyString m3(m2); cout << m2; cout << m3; m1 = m2 + m3; cout << m1; m1 += m3; cout << m1[-10] << endl; cin >> m3; cout << m3; } int main() { test11(); system("pause"); return EXIT_SUCCESS; }
  • 相关阅读:
    Shell 脚本基本操作练习
    Unix 环境高级编程---线程创建、同步、
    ubuntu 安装ssh-server时出现错误:openssh-server: Depends: openssh-client (= 1:5.3p1-3ubuntu3) but 1:5.3p1-3ubuntu4 is to be installed
    python set 集合
    python 深浅拷贝
    用户权限管理
    vim 编辑器的使用
    linux系统初体验
    平滑升级nginx
    在windows下如何使用密钥对远程登录服务器?
  • 原文地址:https://www.cnblogs.com/yyx1-1/p/5785872.html
Copyright © 2020-2023  润新知