02 C 中string h標頭檔案的寫法

2021-08-09 22:38:24 字數 2772 閱讀 9479

1)標頭檔案使用防衛式宣告結構

#ifndef __mystring__

#define __mystring__

#include /*

主要內容部分

*/#endif //__mystring__

說明:**中cstring是為了完成下面string類構造而引入的標準庫標頭檔案,與防衛式宣告無關。

2)在標頭檔案中定義string類結構

class string;  //前置宣告

class string

//#5

private:

char * m_data; //#6

};

注意點:

a、在string類結構中,#6中char * m_data是指向字串第乙個字元位址,是c語言字串型別的表示方法;

b、#1是建構函式,構造字串時預設傳入為空位址,即空字元;

c、#2是拷貝建構函式,也是構造字串的一種方法。如sting s1(s2),即將s2的字串拷貝構造給s1,傳入的是s2字串的常引用;

d、#3是拷貝賦值方法,是將=右邊的字串拷貝給左邊的字串,如sting s1 = s2,考慮到有可能用到s1 = s2 = s3的用法,所以返回sting型別引用;

e、#4是析構函式,用途是釋放動態分配的記憶體;

f、#5是乙個簡單的內聯函式,主要是返回字串的位址。

3)實現建構函式方法#1

inline 

string::string(const char * cstr)

else

}

注意點:

c、實現方法中使用了strlen()和strcpy()方法,是標頭檔案cstring中標準庫的方法,乙個用於返回字串長度,另乙個進行字串深複製。

3)實現析構函式#4

inline 

string::~string()

注意點:

a、釋放資料有兩種方式即array new 和非array new。該例中m_data是new了乙個陣列,所以用delete [ ] m_data的形式;而如果m_data不是new乙個陣列,則用delete m_data形式;

b、建立了析構函式後,宣告字串,使用字串後會自動釋放相應的動態記憶體;

4)實現拷貝建構函式#2

inline

string::string(const string& str)

注意點:

a、拷貝建構函式沒有返回值;

b、拷貝構造傳入的是本身string類物件或者引用物件;

5)實現拷貝賦值函式#3

inline 

string& string::operator = (const string& str)

注意點:

a、拷貝複製就是將乙個string物件複製給另乙個string物件,具體思路是先釋放被賦值的物件(delete [ ] m_data),然後被賦值物件建立賦值物件的記憶體空間大小來放置物件內容,最後用深複製的方法進行拷貝;

b、要考慮到物件自己賦值給自己的情況,即要先判斷是否自己賦值自己,若是出現這種情況,則直接返回物件。一方面可以加快**的執行速度、另一方面避免程式出現bug,因為如果沒有這一步操作,釋放完被賦值的物件後,賦值物件也就被釋放了,程式深複製失敗。

6)實現過載《函式

#include using namespace std;

ostream& operator << (ostream& os, const string& str)

1)string.h標頭檔案

#ifndef __mystring__

#define __mystring__

#include class string; //前置宣告

class string

//#5

private:

char * m_data; //#6

};inline

string::string(const char * cstr)

else

}inline

string::~string()

inline

string::string(const string& str)

inline

string& string::operator = (const string& str)

#include using namespace std;

ostream& operator << (ostream& os, const string& str)

#endif //__mystring__

2)主程式實現對頭檔案的操作

// string_test.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include "string.h"

#include using namespace std;

int _tmain(int argc, _tchar* argv)

/* 輸出:

world

hello

world

hello

*/

說明:在標頭檔案中引用#include "string.h"

標頭檔案string與string h的區別

標頭檔案string與string.h的區別 在c 中,include與 include的區別,前者要使用更新的編譯器 其實大部分編譯器多比較前衛了,出了有些搞嵌入式的用 的編譯器 喔,原來iostream是c 的標頭檔案,iostream.h是c的標頭檔案,即標準的c 標頭檔案沒有.h副檔名,將以...

標頭檔案string與string h的區別

今天再敲 時遇到個問題,vs提示我是string.h還是string,回想起原來遇到過此類問題但是忘記了。在c 中,include與 include的區別,前者要使用更新的編譯器 其實大部分編譯器多比較前衛了,出了有些搞嵌入式的用 的編譯器 喔,原來iostream是c 的標頭檔案,iostream...

標頭檔案string與string h的區別

在c 中,include與 include的區別 前者要使用更新的編譯器 其實大部分編譯器都支援,除了某些搞嵌入式的編譯器 iostream是c 的標頭檔案,iostream.h是c的標頭檔案。標準的c 標頭檔案沒有.h副檔名,將以前的c的標頭檔案轉化為c 的標頭檔案後,有時加上c的字首表示來自於c...