Compartilhar via


Passagem de argumento CString

Este artigo explica como passar objetos CString para funções e como retornar objetos CString de funções.

Convenções de passagem de argumento CString

Ao definir uma interface de classe, você deve determinar a convenção de passagem de argumento para suas funções de membro. Há algumas regras padrão para passar e retornar objetos CString. Se você seguir as regras descritas em Cadeias de caracteres como entradas de função e Cadeias de caracteres como saídas de função, terá um código eficiente e correto.

Cadeias de caracteres como entradas de função

A maneira mais eficiente e segura de usar um objeto CString em funções chamadas é passar um objeto CString para a função. Apesar do nome, um objeto CString não armazena uma cadeia de caracteres internamente como uma cadeia de caracteres no estilo C com um terminador NULL. Em vez disso, um objeto CString mantém um rastreio cuidadoso do número de caracteres que possui. Fornecer CString um LPCTSTR ponteiro para uma NULLcadeia de caracteres terminada é uma pequena quantidade de trabalho que pode se tornar significativa se o código tiver que fazer isso constantemente. O resultado é temporário porque qualquer alteração no conteúdo de CString invalida cópias antigas do ponteiro LPCTSTR.

Em alguns casos, faz sentido fornecer uma cadeia de caracteres no estilo C. Por exemplo, pode haver situações em que uma função chamada é escrita em C e não dá suporte a objetos. Nesse caso, force o parâmetro CString para LPCTSTR e a função obterá uma cadeia de caracteres terminada em NULL no estilo C. Você também pode optar por criar um objeto CString usando o construtor CString, que aceita um parâmetro de cadeia de caracteres no estilo C.

Se o conteúdo da cadeia de caracteres for alterado por uma função, declare o parâmetro como uma referência a CString (CString&) não constante.

Cadeias de caracteres como saídas de função

Normalmente, é possível retornar objetos CString de funções porque os objetos CString seguem a semântica de valor, como tipos primitivos. Para retornar uma cadeia de caracteres somente leitura, use uma referência de CString (const CString&) constante. O exemplo a seguir ilustra o uso dos parâmetros CString e retorna os tipos:

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

Confira também

Cadeias de caracteres (ATL/MFC)