C++中的STRING数据 重载 = 和数组下标

来源:互联网 发布:淘宝上有卖大便的妈 编辑:程序博客网 时间:2024/06/04 01:16

Mstring_Test.c主文件

#include <iostream>#include "Mystring.h"using namespace std;int main(){    Mystring s1;    Mystring s2("s2");    Mystring s2_2 = NULL;     //相当于传递的参数是 NULL指针    Mystring s3 =s2;    Mystring s4;     s4 =s2;  //复用=操作符的复用函数 函数  =操作符的参数 是一个对象     s4 ="s2222222";     //  调用复用等号操作符的  传递指针的函数    =操作符的参数是一个字符串首地址    cout << "hello world!" << endl;    system("pause");    return 0;}

Mstring.cpp类cpp文件

#define  _CRT_SECURE_NO_WARNINGS#include "Mystring.h"Mystring::Mystring(){    m_len = 0;      m_p = new char[m_len +1];    //申请的是一个数组所以四方房的时候按照数组释放      strcpy(m_p,"") ;}Mystring::~Mystring(){    if(m_p != NULL)    {        delete [] m_p;    //申请的时候是按照数组进行申请的        m_p = NULL;        m_len = 0;    }}Mystring::Mystring(const char *p){    if(m_p = NULL)     //支持定义Mstring s2 = NULL;的定义    {        m_len = 0;        m_p = new char[m_len +1];        strcpy(m_p,"") ;    }    else    {        m_len = 0;        m_p = new char[m_len +1];        strcpy(m_p,p) ;    }}//拷贝构造函数Mystring::Mystring(const Mystring& s){    m_len =s.m_len;    m_p = new char[m_len+1];    strcpy(m_p,s.m_p);}//操作符重载//实现  s2 = "s1243346";的操作Mystring& Mystring::operator=(const char *p){     //因为能够调用这些函数说明  s2已经存在了所以要释放    if (m_p != NULL)    {        delete [] m_p;        m_len =0;    }    //根据p分配内存    if(p == NULL)    {       m_len = 0;       m_p = new char[m_len+1];       strcpy(m_p,"");    }    else    {        m_len = strlen(p);        m_p = new char[m_len+1];        strcpy(m_p,p);    }    return *this;       //取出字符串但是将其返回的时候返回的是一个累的对象}//s1 = s2;Mystring& Mystring::operator=(const Mystring &s){    //因为能够调用这些函数说明  s2已经存在了所以要释放    if (this->m_p != NULL)    {        delete [] this->m_p;        this->m_len =0;    }        this->m_len = s.m_len;        this->m_p = new char[m_len+1];        strcpy(this->m_p,s.m_p);    return *this;       //取出字符串但是将其返回的时候返回的是一个累的对象}//在这里重载的目的就是为了取用字符中的数据char& Mystring::operator[](int index){    return this->m_p[index];}

Mstring.h文件

#pragma  once#include <cstring>class Mystring{public:    Mystring();    Mystring(const char *p);    Mystring(const Mystring& s);    ~Mystring();    //操作符重载    Mystring& operator=(const char *p);    Mystring& operator=(const Mystring &s);    //[] 重载  view    char& operator[](int index);      //[]其实就是为了返回   0 好元素的地址private:    int m_len;    char *m_p;};
原创粉丝点击