String类的实现过程

String.h

#ifndef _MYSTRING_
#define _MYSTRING_
#include <iostream>
using namespace std;

class String
{
public:
    String(const char* cstr = 0);
    //class with a pointer member,big three
    String(const String& str);
    String& operator = (const String& str);
    ~String();

    char* get_c_str() const {return m_data;} //const关键字
private:
    char* m_data; 
};
inline String::String(const char* c_str)
{
    if(c_str)
    {
        m_data = new char[strlen(c_str) + 1];
        strcpy(m_data, c_str);
    }
    else //是空字符串也要有一个char放入'\0'
    {
        m_data = new char[1];
        *m_data = '\0';
    }
}
inline String::String(const String& str)
{
    m_data = new char[strlen(str.m_data) + 1];
    strcpy(m_data, str.m_data);
}
inline String& String::operator = (const String& str)
{
    //s1 = s1,指针指向同一块内存,但是会先清除内存中的值再申请内存赋值
    if(this == &str) //如果没有,当自我赋值的时候会出错
        return *this;
    delete[] m_data; //清空内存中本来的东西
    m_data = new char[strlen(str.m_data) + 1]; //申请合适的大小
    strcpy(m_data, str.m_data); //拷贝
    return *this;
}
inline String::~String()
{
    delete[] m_data; //new array-delete array
}
ostream& operator << (ostream& os, const String& str)
{
    os << str.get_c_str();
    return os;
}
#endif

String_test.cpp

#include "String.h"

int main()
{
    String s1("hello");
    String s2;
    String s3(s1); //拷贝构造函数
    cout << s3 << s1 << endl;
    s2 = s3; //拷贝赋值函数
    cout << s2 << endl;
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值