1. 程式人生 > >簡單實現C++庫中的String類

簡單實現C++庫中的String類

#include <iostream>
#include <string.h>
#pragma warning(disable: 4996)
using namespace std;

class String
{
    friend ostream& operator<<(ostream& os, String& str);

public:
    String(char* str = "")
        : _str(new char[strlen(str)+1])
    {
        strcpy(_str, str);
    }

    String(const
String& s) :_str(new char[strlen(s._str) + 1]) { strcpy(_str, s._str); } String& operator=(const String& s) { if (_str != s._str) { String sTmp(s); char* pTmp = sTmp._str; sTmp._str = _str;//將當前物件的空間交給tmp,讓其呼叫解構函式釋放該空間
_str = pTmp; } return *this; } char& operator[](size_t index) { return _str[index]; } const char& operator[](size_t index)const//[]操作符必須成對過載 { return _str[index]; } ~String() { if (_str != NULL) { delete
[] _str; _str = NULL; } } private: char* _str; }; ostream& operator<<(ostream& os, String& str) { os << str._str; return os; } int main() { String s1; String s2("hello"); String s3(s2); String s4("world"); s4 = s3; cout << s4[5] << endl; cout << s4 << endl; return 0; }