Das folgende Code-Beispiel stammt aus dem Buch
Objektorientiertes Programmieren in C++
- Ein Tutorial für Ein- und Umsteiger
von Nicolai Josuttis, Addison-Wesley München, 2001
© Copyright Nicolai Josuttis 2001
#ifndef STRING_HPP
#define STRING_HPP
// Headerdatei für I/O
#include <iostream>
// **** BEGINN Namespace Bsp ********************************
namespace Bsp {
class String {
protected:
char* buffer; // Zeichenfolge als dynamisches Feld (Array)
unsigned len; // aktuelle Anzahl an Zeichen
unsigned size; // Speicherplatzgröße von buffer
public:
// Default- und char*-Konstruktor
String (const char* = "");
// Aufgrund dynamischer Komponenten:
String (const String&); // Copy-Konstruktor
String& operator= (const String&); // Zuweisung
virtual ~String(); // Destruktor (neu: virtuell)
// Vergleichen von Strings
friend bool operator== (const String&, const String&);
friend bool operator!= (const String&, const String&);
// Hintereinanderhängen von Strings
friend String operator+ (const String&, const String&);
// Ausgabe mit Streams
virtual void printOn (std::ostream&) const;
// Eingabe mit Streams
virtual void scanFrom (std::istream&);
// Anzahl der Zeichen
// Beachte: darf beim Ableiten nicht überschrieben werden
unsigned length () const {
return len;
}
private:
/* Konstruktor aus Länge und Puffer
* - intern für Operator +
*/
String (unsigned, char*);
};
// Standard-Ausgabeoperator
inline std::ostream& operator << (std::ostream& strm, const String& s)
{
s.printOn(strm); // String auf Stream ausgeben
return strm; // Stream zurückliefern
}
// Standard-Eingabeoperator
inline std::istream& operator >> (std::istream& strm, String& s)
{
s.scanFrom(strm); // String von Stream einlesen
return strm; // Stream zurückliefern
}
/* Operator !=
* - als Umsetzung auf Operator == inline implementiert
*/
inline bool operator!= (const String& s1, const String& s2) {
return !(s1==s2);
}
} // **** ENDE Namespace Bsp ********************************
#endif // STRING_HPP