C++ string建構函式和解構函式詳解

2020-07-16 10:04:36
建構函式有四個引數,其中三個具有預設值。要初始化一個 string 類,可以使用 C 風格字串或 string 型別物件,也可以使用 C 風格字串的部分或 string 型別物件的部分或序列。

注意,不能使用字元或者整數去初始化字串。

常見的 string 類建構函式有以下幾種形式:

string strs //生成空字串
string s(str) //生成字串str的複製品
string s(str, stridx) //將字串str中始於stridx的部分作為建構函式的初值
string s(str, strbegin, strlen) //將字串str中始於strbegin、長度為strlen的部分作為字串初值
string s(cstr) //以C_string型別cstr作為字串s的初值
string s(cstr,char_len)    //以C_string型別cstr的前char_len個字串作為字串s的初值
strings(num, c) //生成一個字串,包含num個c字元
strings(strs, beg, end)    //以區間[beg, end]內的字元作為字串s的初值

解構函式的形式如下:

~string() //銷毀所有記憶體,釋放記憶體

如果字串只包含一個字元,使用建構函式對其初始化時,使用以下兩種形式比較合理:

std::string s('x');    //錯誤
std::string s(1, 'x');    //正確

std::string s("x");    //正確

C_string 一般被認為是常規的 C++ 字串。目前,在 C++ 中確實存在一個從 const char * 到 string 的隱式型別轉換,卻不存在從 string 物件到 C_string 的自動型別轉換。對於 string 型別的字串,可以通過 c_str() 函數返回該 string 類物件對應的 C_string。

通常,程式設計師在整個程式中應堅持使用 string 類物件,直到必須將內容轉化為 char* 時才將其轉換為 C_string。

【例 1】
#include <iostream>
#include <string>
using namespace std;

int main ()
{
    string str ("12345678");
    char ch[ ] = "abcdefgh";
    string a; //定義一個空字串
    string str_1 (str); //建構函式,全部複製
    string str_2 (str, 2, 5); //建構函式,從字串str的第2個元素開始,複製5個元素,賦值給str_2
    string str_3 (ch, 5); //將字串ch的前5個元素賦值給str_3
    string str_4 (5,'X'); //將 5 個 'X' 組成的字串 "XXXXX" 賦值給 str_4
    string str_5 (str.begin(), str.end()); //複製字串 str 的所有元素,並賦值給 str_5
    cout << str << endl;
    cout << a << endl ;
    cout << str_1 << endl;
    cout << str_2 << endl;
    cout << str_3 << endl;
    cout << str_4 << endl;
    cout << str_5 << endl;
    return 0;
}
程式執行結果為:

12345678

12345678
34567
abcde
XXXXX
12345678

使用 cout 輸出 string 型別物件 a 時,輸出為空。這是因為沒有給 string 型別物件 a 賦值。

通過上述內容的學習,讀者應對 string 類別建構函式和解構函式有了初步了解,並能夠使用建構函式建立 string 型別物件。