Sdílet prostřednictvím


CString Předávání argumentů

Tento článek vysvětluje, jak předat CString objekty funkcím a jak vrátit CString objekty z funkcí.

CString Konvence předávání argumentů

Při definování rozhraní třídy je nutné určit konvenci předávání argumentů pro členské funkce. Existují některá standardní pravidla pro předávání a vracení CString objektů. Pokud dodržujete pravidla popsaná v řetězcích jako vstupy funkcí a řetězce jako výstupy funkce, budete mít efektivní a správný kód.

Řetězce jako vstupy funkcí

Nejúčinnějším a nejbezpečnějším způsobem použití objektu CString ve volaným funkcím je předání CString objektu do funkce. I přes název CString objekt neukládá řetězec interně jako řetězec ve stylu jazyka C, který má NULL ukončovací znak. CString Místo toho objekt pečlivě sleduje počet znaků, které má. LPCTSTR Poskytnutí CString ukazatele na NULLřetězec -terminated je malé množství práce, které může být významné, pokud to váš kód musí dělat neustále. Výsledek je dočasný, protože jakákoli změna CString obsahu zneplatní staré kopie LPCTSTR ukazatele.

V některých případech dává smysl poskytnout řetězec ve stylu jazyka C. Může se například jednat o situaci, kdy je volána funkce napsaná v jazyce C a nepodporuje objekty. V tomto případě převede CString parametr na LPCTSTRa funkce získá řetězec -terminated ve stylu NULLC. Můžete také přejít do jiného směru a vytvořit CString objekt pomocí CString konstruktoru, který přijímá parametr řetězce ve stylu C.

Pokud je obsah řetězce změněn funkcí, deklarujte parametr jako nekonstantní CString odkaz (CString&).

Řetězce jako výstupy funkce

Objekty z funkcí lze obvykle vracet CString , protože CString objekty sledují sémantiku hodnot, jako jsou primitivní typy. Pokud chcete vrátit řetězec jen pro čtení, použijte konstantní CString odkaz (const CString&). Následující příklad ukazuje použití parametrů a návratových CString typů:

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

Viz také

Řetězce (ATL/MFC)