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 NULLstringa 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 LPCTSTRe 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")));

Vedi anche

Stringhe (ATL/MFC)