C++仿string实现的String方法

C++仿string实现的String方法
String.h

  #include <iostream>
     using namespace std;
     class String {
         friend ostream &operator<<(ostream &,const String &);
         private:
         char *m_cstring;
         public:
         String(const char *cstring){};
         // 拷贝构造
         String(const String &string);
         ~String();
         // 重载等号运算符,接收的是C语言字符串
         String &operator=(const char *cstring);
         // 重载等号运算符,接收的是String类型的字符串
         String &operator=(const String &string);
     };

String.cpp

#include <iostream>
     #include "String.h"
     using namespace std;
     
     String::String(const char *cstring) {
         if(!cstring)return;
         this->m_cstring = new char[strlen(cstring) + 1]{};
         strcpy(this->m_cstring,cstring);
     }
     
     // 拷贝构造
     String::String(const String &string) {
        *this = string.m_cstring;
     }
     
     String::~String(){
         if(!this->m_cstring) return;
         delete[] this->m_cstring;
         this->m_cstring = NULL;
     
        析构时也可以写为operator = (NULL)或者*this = (NULL)等价于(*this).operator = (NULL);等价于this->operator = (NULL)
     }
     
     String::String &operator=(const char *cstring){
         // 大家都指向同一个堆空间就返回自己
         if(this->m_cstring == cstring) return *this;
         // 释放旧的字符串
         if(this->m_cstring){
             delete[] this->m_cstring;
             this->m_cstring = NULL;
         }
         // 指向新的字符串
         if(cstring){
             this->m_cstring = new char[strlen(cstring) + 1]{};
             strcpy(this->m_cstring,cstring);
         }
        return *this;
     };
     
     
     // 重载等号运算符,接收的是String类型的字符串
     String::String &operator=(const String &string){
        return operator=(string.m_cstring);
     }
     
     
     ostream &operator<<(ostream &cout,const String &string){
         if (!string.m_cstring) return cout;
         return cout << string.m_cstring;
     }

main.cpp

 #include <iostream>
     using namespace std;
     
     int main() {
     
         // "123" -> const char *
         String str1 = "123";
     
         // 在栈空间
         char name[] = "123";
         String str = name;
         cout << str << endl;
         cout << str1 << endl;
     
         {
         // 重载等号运算符,接收的是C语言字符串
         String str4 = "3333";
         str4 = "555";
         cout << str << endl;
     
         }
     
         {
         // 重载等号运算符,接收的是String类型的字符串
          String str5 = "5555";
         String str6 = "6666";
         str5 = str6;
         cout << str5 <<endl;
         }
     
         {
         // 重载等号运算符,指向同一个堆空间
         String str7 = "5555";
         str7 = str7;
         cout << str5 <<endl;
         }
     
         {
         // 拷贝构造
         String str1 = "1111";
         String str2 = str1;
         }
     
         getchar();
         return 0;
     }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值