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