Paso de argumentos de CString
En este artículo se detalla cómo pasar objetos CString
a funciones y cómo devolver objetos CString
desde las funciones.
Convenciones para el paso de argumentos de CString
Al definir una interfaz de clase, debe determinar la convención de paso de argumentos para las funciones miembro. Hay algunas reglas estándar para pasar y devolver objetos CString
. Si sigue las reglas descritas en Cadenas como entradas de función y Cadenas como salidas de función, tendrá un código eficaz y correcto.
Cadenas como entradas de función
La forma más eficaz y segura de usar un objeto CString
en las funciones llamadas es pasar un objeto CString
a la función. A pesar del nombre, un objeto CString
no almacena internamente una cadena como una cadena de estilo C que tiene un terminador NULL
. En su lugar, un objeto CString
realiza un seguimiento cuidadoso del número de caracteres que tiene. Tener CString
un LPCTSTR
puntero a una NULL
cadena terminada es una pequeña cantidad de trabajo que puede ser significativa si el código tiene que hacerlo constantemente. El resultado es temporal porque cualquier cambio en el contenido CString
invalida las copias antiguas del puntero LPCTSTR
.
Tiene sentido en algunos casos proporcionar una cadena de estilo C. Por ejemplo, puede haber una situación en la que una función llamada se escriba en C y no admita objetos. En este caso, coerce el parámetro CString
a LPCTSTR
, y la función obtendrá una cadena terminada en NULL
de estilo C. También puede ir a la otra dirección y crear un objeto CString
mediante el constructor CString
que acepta un parámetro de cadena de estilo C.
Si una función va a cambiar el contenido de la cadena, declare el parámetro como una referencia no constante CString
(CString&
).
Cadenas como salidas de función
Normalmente, puede devolver objetos CString
desde funciones porque los objetos CString
siguen la semántica de valores como los tipos primitivos. Para devolver una cadena de solo lectura, use una referencia constante CString
(const CString&
). En el ejemplo siguiente se muestra el uso de parámetros y tipos de valor devuelto de CString
:
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")));