7-26晚上实现mystring

mystring.h

#ifndef _MYSTRING_H_
#define _MYSTRING_H_

#include <iostream>
using namespace std;
class Mystring
{
    //<< >> 全局函数
    friend istream & operator >> (istream &in ,Mystring & s1); // 重载 >>
    friend ostream & operator << (ostream &out, const Mystring & s1); //重载 <<

private:
    char *m_data;
    int m_len;
    void init();
public:
    Mystring();
    Mystring(char *str);
    Mystring(int l, char ch);
    Mystring(const Mystring &s);
    Mystring & operator =( Mystring &s);
    Mystring & operator +=(Mystring &s);
    char & operator [](int index);
};
#endif

mystring.cpp

#include "mystring.h"
#include <string.h>
#include <iostream>
#pragma warning(disable:4996)

using namespace std;

void Mystring::init()
{
    m_len = 1;
    m_data = new char[m_len+1];
}

Mystring::Mystring()
{
    init();
}

Mystring::Mystring(char *str)
{
    m_len = strlen(str);
    m_data = new char[m_len + 1];//注意+1
    strcpy(this->m_data, str);
}

Mystring::Mystring(int l, char ch)
{
    m_len = l;
    m_data = new char[m_len + 1];
    for (int i = 0; i < l; i++)
    {
        m_data[i] = ch;
    }
    m_data[l] = '\0';//!!!!!!!!!!!!!!!!!!!!!!!!!!
}

Mystring::Mystring(const Mystring &s)
{
    this->m_len = s.m_len;
    m_data = new char[m_len + 1];//!!!!!!!!!!!!
    strcpy(this->m_data  , s.m_data);
}


istream & operator >>(istream &in,Mystring &s)//重载 >>
{
    char tmp[1024] = {0};
    in >> tmp;
    if (s.m_data != NULL)
    {
        delete s.m_data;
    }
    
    s.m_len = strlen(tmp);
    s.m_data = new char[s.m_len + 1];//注意+1

    strcpy(s.m_data, tmp);
    return in;
}

ostream & operator << (ostream &out, const Mystring &s1)//重载 <<
{
    out << s1.m_data;
    return out;
}

Mystring& Mystring::operator =(Mystring &s)//重载 >>
{
    m_len = s.m_len;
    if (m_data != NULL)
    {
        delete m_data;
    }

    m_data = new char[s.m_len + 1];//注意+1
    strcpy(m_data, s.m_data);

    return *this;
}

Mystring & Mystring::operator +=(Mystring &s)
{
    m_len = m_len + s.m_len;

    char *tmp = new char [m_len + 1];

    strcpy(tmp, m_data);
    strcat(tmp,s.m_data);
    
    delete m_data;
    m_data = tmp;
    return *this;
}

char & Mystring::operator [](int index)
{
    return m_data[index];
}

main.cpp

#include <iostream>
#include "mystring.h"

using namespace std;

int main()
{
	Mystring s1;
	Mystring s2("hello");
	Mystring s3(10, 'a');
	Mystring s4 = s2;
	Mystring s5(s2);
	cin >> s1;

	cout << "s1 = " << s1 << endl;
	cout << "s2 = " << s2 << endl;
	cout << "s3 = " << s3 << endl;
	cout << "s4 = " << s4 << endl;
	cout << "s5 = " << s5 << endl;
	s1 += s2;
	cout << s1 << endl;
	cout << s1[0] << endl;
	s1[1] = '1';
	cout << s1 << endl;

	system("pause");
	return 0;
}


 

猜你喜欢

转载自blog.csdn.net/qq_38313246/article/details/81227291