Tervezzünk meg egy általános célú String osztályt, amely támogatja a összefűzést (+), összehasonlítást, a többszörös értékadást (s1 = s2 = s3;), az egyes karakterek elérését a [] operátorral, illetve képes együttműködni a nullterminált C sztringekkel (oda-vissza konverzió), valamint képes a szabványos kimenetre kiírni magát, és a szabványos bemenetről beolvasni az adatait!
Deklaráljuk az osztály tagváltozóit és tagfüggvényeit a fentieknek megfelelően! (implementáció nélkül)
class String
{
// A karakterek aktuális száma:
unsigned elementsNum;
// A karaktereket tartalmazó memóriaterületre mutató pointer:
char *pData;
public:
// Argumentum nélküli konstruktor:
String();
// Másoló konstruktor:
String(const String &string);
// Egy NULL végu sztringet váró konverziós konstruktor
// Ez felel a char*-> String konverzióért
String(const char* str);
// A destruktor:
~String();
// Visszaadja a megadott pozícióban lévo karaktert, egyébként nullát:
char& operator[](unsigned pos);
// Konstans objektumokat is le szeretnénk kérdezni
const char& operator[](unsigned pos)const;
// Összefuz két Stringet
String operator+(const String& theOther) const;
String& operator=(const String& theOther);
bool operator==(const String& theOther) const;
bool operator!=(const String& theOther) const;
// Visszaad egy csak olvasható hozzáférést a stringhez, ez felel a String-> char* konverzióért
operator const char*()const;
// kiirja/beolvassa a sztringet a kimeneti/bemeneti folyamon keresztül
friend std::ostream &operator<<(std::ostream &os, const String &str);
friend std::istream &operator>>(std::istream &is, const String &str);
};