/*
Ta klasa nie obsługuje tekstu w formacie UNICODE ani żadnego innego rozszerzonego formatu ASCII. Na przykład nie obsługuje napisów dwubajtowych przewidzianych dla alfabetów dalekowschodnich ani alfabetu arabskiego, w którym pisze się od prawej do lewej.
Klasa nie zapewnia również rozbudowanego sprawdzania błędów w parametrach. Przekazanie wartości pustej do sz w konstruktorze wywoła ogólny błąd zabezpieczeń.
Działanie dowolnym operatorem, takim jak = lub >, na pustym napisie da w efekcie przewidywalne, ale istotne błędy, takie jak ogólny błąd zabezpieczeń. Można tu było zwrócić coś innego, ale zawsze lepiej uzyskać ogólny błąd zabezpieczenia niż jakiś łagodniejszy efekt, o którym można by było się nie dowiedzieć. To powoduje ukrycie potencjalnej usterki, która może wywołać inne efekty uboczne nie tak oczywiste jak ogólny błąd zabezpieczeń. Możemy użyć tego kodu do utworzenia biblioteki klas, w której nie trzeba kontrolować kodu wywołującego, ale wówczas należy zapewnić mechanizm obsługi błędów lub generować wyjątek w opisanej sytuacji. Można też wstawić asercje. Zawsze jednak lepiej obsługiwać wyjątki.
*/
class String
private:
// Stała składowa dodana tylko w celu zademonstrowania inicjalizowania stałych // składowych, const int m_cchTest;
// długość napisu int m_cch;
// Napis zakończony znakiem pustym. Ułatwia zwracanie napisów // zakończonych znakiem pustym, char *m_pch;
// Wskazówka 56.
void lnitString(const char *pch, int cch); void Append(const char *pch, int cch); void ReinitString(const char *pch, int cch); public:
// Wskazówka 69.
// Wskazówka 70.
// Wskazówka 91.
String(void): m_cr' (0), m_cchTest(10)
m_pch =NULL;
// Wskazówka 71.
// m_cchTest = 10; Źle.
}