CString
Passaggio di argomenti
Questo articolo illustra come passare CString
oggetti alle funzioni e come restituire CString
oggetti dalle funzioni.
CString
Convenzioni di passaggio di argomenti
Quando si definisce un'interfaccia di classe, è necessario determinare la convenzione di passaggio degli argomenti per le funzioni membro. Esistono alcune regole standard per il passaggio e la restituzione di CString
oggetti. Se si seguono le regole descritte in Stringhe come input di funzione e stringhe come output delle funzioni, il codice sarà efficiente e corretto.
Stringhe come input di funzione
Il modo più efficiente e sicuro per usare un CString
oggetto nelle funzioni chiamate consiste nel passare un CString
oggetto alla funzione. Nonostante il nome, un CString
oggetto non archivia internamente una stringa come stringa di tipo C con un NULL
carattere di terminazione. Un oggetto tiene invece CString
traccia attenta del numero di caratteri di cui dispone. La presenza CString
di un LPCTSTR
puntatore a una NULL
stringa con terminazione è una piccola quantità di lavoro che può diventare significativa se il codice deve farlo costantemente. Il risultato è temporaneo perché qualsiasi modifica al CString
contenuto invalida le copie precedenti del LPCTSTR
puntatore.
In alcuni casi ha senso fornire una stringa in stile C. Ad esempio, può verificarsi una situazione in cui una funzione chiamata viene scritta in C e non supporta gli oggetti. In questo caso, forzare il CString
parametro in LPCTSTR
e la funzione otterrà una stringa con terminazione C NULL
. È anche possibile passare all'altra direzione e creare un CString
oggetto usando il CString
costruttore che accetta un parametro stringa di tipo C.
Se il contenuto della stringa deve essere modificato da una funzione, dichiarare il parametro come riferimento non costante CString
(CString&
).
Stringhe come output della funzione
In genere è possibile restituire CString
oggetti dalle funzioni perché CString
gli oggetti seguono la semantica dei valori come i tipi primitivi. Per restituire una stringa di sola lettura, usare un riferimento costante CString
(const CString&
). Nell'esempio seguente viene illustrato l'uso di CString
parametri e tipi restituiti:
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")));