• 类(传入的形参为指针形式)-字符串的实现


    #ifndef __MYSTRING__
    #define __MYSTRING__
    
    //实现字符串-类,构造函数中将指针作为参数
    class String
    {
    public:                                 
        String(const char* cstr=0);
        //需要自己写拷贝构造函数和拷贝赋值函数,实现“深拷贝”;否则会直接复制指针m_data,这样多个对象中的m_data指向的同一片地址,这叫“浅拷贝”                  
        String(const String& str);                    
        String& operator=(const String& str);
        //需要自己写析构函数,因为在构造函数中可能动态分配了内存,使用默认的析构函数会造成内存泄漏         
        ~String();                                    
        char* get_c_str() const { return m_data; }
    private:
        char* m_data;
    };
    
    #include <cstring>
    
    //构造函数,首先判断从指针参数是不是0
    inline
    String::String(const char* cstr)
    {
       if (cstr) {
          m_data = new char[strlen(cstr)+1];
          strcpy(m_data, cstr);
       }
       else {   
          m_data = new char[1];
          *m_data = '';
       }
    }
    
    inline
    String::~String()
    {
       //分配内存时,分配的是数组形式,现在要用delete[]
       delete[] m_data;
    }
    
    //拷贝赋值函数,为了可以使用连等a=b=c的形式,所以返回值不能为void
    inline
    String& String::operator=(const String& str)
    {
       //判断是不是赋值给本身
       if (this == &str)
          return *this;
    
       delete[] m_data;
       //下行中的str.m_data可以直接取私有变量m_data,是因为相同类型的对象互为friend
       m_data = new char[ strlen(str.m_data) + 1 ];
       strcpy(m_data, str.m_data);
       return *this;
    }
    
    inline
    String::String(const String& str)
    {
       m_data = new char[ strlen(str.m_data) + 1 ];
       strcpy(m_data, str.m_data);
    }
    
    #include <iostream>
    using namespace std;
    
    ostream& operator<<(ostream& os, const String& str)
    {
       os << str.get_c_str();
       return os;
    }
    
    #endif
  • 相关阅读:
    UE4_武器4_武器切换(下)
    UE4_武器3_武器切换(上)
    UE4_武器2_矛的攻击与动画
    UE4_武器1_创建武器
    Java知识体系复习笔记
    今日份学习: 毕设。。。。
    笔记:Spring security认证
    一个项目的记录:多人博客
    今日份学习: Spring
    今日份学习:部署?
  • 原文地址:https://www.cnblogs.com/yanxingang/p/14690200.html
Copyright © 2020-2023  润新知