用C++实现String类的四种构造和运算符重载

(教学版本,main函数可以自己写)

MyString.h

 

#ifndef __MYSTRING_H__

#define __MYSTRING_H__

 

#include <iostream>

using namespace std;

 

class MyString

{

    friend ostream & operator<<(ostream& out, const MyString& str);

    friend istream & operator>>(istream& in, const MyString& str);

public:

    MyString(int len=0);

    MyString(const char *p);

    MyString(const MyString & str);

    ~MyString();

 

public:

    MyString& operator=(const char *p);

    MyString& operator=(const MyString &str);

 

    char& operator[](const int index);

 

    bool operator==(const char *p) const;

    bool operator==(const MyString& str) const;

    bool operator!=(const char *p) const;

    bool operator!=(const MyString& str) const;

 

    bool operator<(const char *p) const;

    bool operator<(const MyString& str) const;

    bool operator>(const char *p) const;

    bool operator>(const MyString& str) const;

 

public:

    char *c_str()

    {

        return m_p;

    }

    const char *c_str2()

    {

        return m_p;

    }

 

    int length()

    {

        return m_len;

    }

 

private:

    int m_len;

    char *m_p;

};

 

#endif

 

 

 

 

 

MyString.cpp

#include "MyString.h"

#include <string.h>

 

ostream & operator<<(ostream& out, const MyString& str)

{

    out << str.m_p;

    return out;

}

 

istream & operator>>(istream& in, const MyString& str)

{

    in >> str.m_p;

    return in;

}

 

MyString::MyString(int len)

{

    if (len == 0)

    {

        m_len = 0;

        m_p = new char[m_len + 1];

        strcpy(m_p, "");

    }

    else

    {

        m_len = len;

        m_p = new char[m_len + 1];

        memset(m_p, 0, m_len+1);

    }

}

 

MyString::MyString(const char *p)

{

    if (p == NULL)

    {

        m_len = 0;

        m_p = new char[m_len + 1];

        strcpy(m_p, "");

    }

    else

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值