聽侯捷老師講課的筆記:

#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

#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;
}