Compartir a través de


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

Consulte también

Cadenas (ATL/MFC)