CString
Pengoperasian Argumen
Artikel ini menjelaskan cara meneruskan CString
objek ke fungsi dan cara mengembalikan CString
objek dari fungsi.
CString
Konvensi Pengoperasian Argumen
Saat menentukan antarmuka kelas, Anda harus menentukan konvensi pengesahan argumen untuk fungsi anggota Anda. Ada beberapa aturan standar untuk meneruskan dan mengembalikan CString
objek. Jika Anda mengikuti aturan yang dijelaskan dalam String sebagai Input dan String Fungsi sebagai Output Fungsi, Anda akan memiliki kode yang efisien dan benar.
String sebagai Input Fungsi
Cara paling efisien dan aman untuk menggunakan CString
objek dalam fungsi yang disebut adalah meneruskan CString
objek ke fungsi. Terlepas dari namanya, CString
objek tidak menyimpan string secara internal sebagai string gaya C yang memiliki NULL
terminator. Sebagai gantinya, objek CString
tetap melacak dengan cermat jumlah karakter yang dimilikinya. Setelah CString
menyediakan LPCTSTR
pointer ke NULL
string yang dihentikan adalah sejumlah kecil pekerjaan yang dapat menjadi signifikan jika kode Anda harus melakukannya terus-menerus. Hasilnya bersifat sementara karena setiap perubahan pada CString
konten membatalkan salinan lama pointer LPCTSTR
.
Masuk akal dalam beberapa kasus untuk menyediakan string gaya C. Misalnya, mungkin ada situasi di mana fungsi yang disebut ditulis dalam C dan tidak mendukung objek. Dalam hal ini, paksa CString
parameter ke LPCTSTR
, dan fungsi akan mendapatkan string yang dihentikan gaya NULL
C. Anda juga dapat pergi ke arah lain dan membuat CString
objek dengan menggunakan CString
konstruktor yang menerima parameter string gaya C.
Jika konten string akan diubah oleh fungsi, nyatakan parameter sebagai referensi nonkonstant CString
(CString&
).
String sebagai Output Fungsi
Biasanya Anda dapat mengembalikan CString
objek dari fungsi karena CString
objek mengikuti semantik nilai seperti jenis primitif. Untuk mengembalikan string baca-saja, gunakan referensi konstanta CString
(const CString&
). Contoh berikut mengilustrasikan penggunaan CString
parameter dan jenis pengembalian:
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")));