CString
自變數傳遞
本文說明如何將對象傳遞 CString
至函式,以及如何從函式傳回 CString
物件。
CString
自變數傳遞慣例
當您定義類別介面時,您必須判斷成員函式的自變數傳遞慣例。 傳遞和傳 CString
回物件有一些標準規則。 如果您遵循字串中所述的規則做為函式輸入和字串做為函式輸出,您將有效率、正確的程式代碼。
字串做為函式輸入
在呼叫的函式中使用物件最有效率且最安全的方式 CString
是將對象傳遞 CString
至函式。 儘管有名稱, CString
但物件不會在內部儲存字串做為具有終止符的 NULL
C 樣式字串。 相反地, CString
物件會仔細追蹤其擁有的字元數。 CString
提供LPCTSTR
已終止字串的指標NULL
是少量的工作,如果您的程式代碼必須持續執行,可能會變得相當重要。 結果是暫時的,因為對內容所做的任何變更 CString
會使指標的 LPCTSTR
舊複本失效。
在某些情況下,提供 C 樣式字串確實有意義。 例如,在某些情況下,呼叫的函式是以 C 撰寫,且不支援 物件。 在此情況下,將 參數強制 CString
為 LPCTSTR
,而 函式會取得 C 樣式 NULL
終止字串。 您也可以使用接受 C 樣式字串參數的CString
建構函式,來前往其他方向並建立 CString
物件。
如果函式要變更字串內容,請將 參數宣告為非常 CString
數參考 (CString&
)。
字串做為函式輸出
一般而言,您可以從函式傳回 CString
對象,因為 CString
物件會遵循如基本類型之類的值語意。 若要傳回只讀字串,請使用常數 CString
參考 (const CString&
)。 下列範例說明參數和傳回類型的用法 CString
:
class CName : public CObject
{
private:
CString m_firstName;
TCHAR m_middleInit;
CString m_lastName;
public:
CName() {}
void SetData(LPCTSTR fn, const TCHAR mi, LPCTSTR ln)
{
m_firstName = fn;
m_middleInit = mi;
m_lastName = ln;
}
void GetData(CString& cfn, TCHAR& mi, CString& cln)
{
cfn = m_firstName;
mi = m_middleInit;
cln = m_lastName;
}
CString GetLastName()
{
return m_lastName;
}
};
CName name;
CString last, first;
TCHAR middle;
name.SetData(_T("John"), 'Q', _T("Public"));
ASSERT(name.GetLastName() == _T("Public"));
name.GetData(first, middle, last);
ASSERT((first == _T("John")) && (last == _T("Public")));