天天看點

String類的寫法

聽侯捷老師講課的筆記:

String類的寫法
String類的寫法

#pragma once
class String
{
public:
    String(const char* cstr);
    String(const String& str);
    String& operator =(const String& str);
    ~String();
    
    char* get_c_str() const { return m_data; }//這個類的成員函數内的所有操作,不準備改變私有資料m_data,是以要加上
                                              //const去修飾這個函數,一出手就要:不同凡響
private:
    char* m_data;
};


inline String::String(const char* cstr=0)
{
    if (cstr)
    {
        std::cout << "如果傳進來的字元串不為空,它就是:"<<std::endl;
        m_data = new char[strlen(cstr) + 1];
        strcpy(m_data, cstr);
    }
    else
    {
        std::cout << "如果傳進來的字元串為空,它就是:" << std::endl;
        m_data = new char[1];
        *m_data = '\0';
    }
}
inline String::~String()
{
    std::cout << std::endl << "析構函數此時被調用!" << std::endl;
    delete[] m_data;
}
//編寫拷貝構造函數
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)
{
    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;
}


//重載輸出符<<
#include<iostream>
std::ostream& operator <<(std::ostream& os, const String& str)
{
    os << str.get_c_str();
    return os;
}      

View Code

String類的寫法
String類的寫法
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include"string.h"

using namespace std;
int main()
{
    
    String str("Greetings!,china!");
    cout <<"str:  "<< str << endl;
    
    cout << endl;
    String* p = new String("hello,world!");
    cout << "*p:  " << *p << endl;
    delete p;

    cout << endl;
    String str1("to be or not to be");
    cout << "str1:  " << str1 << endl;
    
    cout << endl;
    String str2("to be or not to be");
    cout << "str2:  " << str2 << endl;

    cout << endl;
    String str3;
    str3 = str2;
    cout << "str3:  " << str3 << endl;

    cout << endl;
    cout << "在做自我指派str3 = str3之後:" << endl;
    str3 = str3;
    cout << "str3:  " << str3 << endl;

    system("pause");
    return 0;
}