Argument CString, przekazując
W tym artykule wyjaśniono, jak przekazać CString obiekty do funkcji i jak zwrócić CString obiektów z funkcji.
Konwencje przekazywania argumentu CString
Podczas definiowania interfejs klasy musi określić Konwencji przekazywanie argumentów dla użytkownika funkcji elementów członkowskich.Istnieją pewne standardowe zasady dotyczące przekazując i zwracanie CString obiektów.Jeśli należy przestrzegać zasad opisanych w ciągi jako nakłady w funkcji i ciągi jako funkcja, będzie skuteczne, poprawny kod.
Ciągi jako nakłady funkcji
Najbardziej skuteczny i bezpieczny sposób użyć CString jest przekazanie obiekt w funkcji o nazwie CString obiektu do funkcji.Pomimo nazwy CString obiektu nie przechowuje ciąg wewnętrznie jako ciąg c styl, który ma wartość null terminator.Zamiast tego CString obiektu zachowuje dokładnego śledzenie liczby znaków ma.O CString zapewniają LPCTSTR wskaźnik ciąg zakończony znakiem null jest niewielką ilość pracy, która może stać się istotne, jeśli kod ma stale to zrobić.Wynik jest tymczasowe, ponieważ wszelkie zmiany do CString zawartość unieważnia starych kopii LPCTSTR wskaźnik.
To sensu w niektórych przypadkach udostępnia ciąg c stylu.Na przykład może być sytuacja, gdy wywoływana funkcja jest napisany w c i nie obsługuje obiektów.W takim przypadku wymuszone CString parametr LPCTSTR, i funkcja otrzyma styl c ciąg zakończony znakiem null.Można także przejść innym kierunku i utworzyć CString obiektu za pomocą CString Konstruktor, który akceptuje parametr ciągu c stylu.
Jeśli ciąg zawartości mają być zmieniane przez funkcję, należy zadeklarować parametr jako nonconstant CString odniesienia (CString &).
Ciągi jako funkcja
Zazwyczaj można zwrócić CString obiekty z funkcji, ponieważ CString obiektów wykonaj semantykę wartości jak typów pierwotnych.Zwraca ciąg tylko do odczytu, należy użyć stałej CString odniesienia (const CString &).Poniższy przykład ilustruje użycie CString parametrów i zwracanych typów:
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")));