Перегрузка оператора вывода
Настало время снабдить наш класс String возможностью использовать объект cout для вывода своих данных так же, как при выводе данных базовых типов. До сих пор для вывода значения переменной-члена приходилось использовать следующее выражение:
cout << theString.GetString;
Неплохо было бы иметь возможность написать просто
cout << theString;
Для этого необходимо перегрузить функцию operator<<. Более подробно использование потоков iostreams для вывода данных обсуждается на занятии 16. А в листинге 15.9 объявляется перегрузка функции operator<< как друга.
Листинг 15.8. Перегрузка operator<<
1: #include
2: #include
3:
4: class String
5: {
6: public:
7: // конструкторы
8: String;
9: String(const char *const);
10: String(const String &);
11: ~String;
12:
13: // перегруженные операторы
14: char & operator[](int offset);
15: char operator[](int offset) const;
16: String operator+(const String&);
17: void operator+=(const String&);
18: String & operator= (const String &);
19: friend ostream& operator<<
20: (ostream& theStream,String& theString);
21: // Общие методы доступа
22: int GetLenconst { return itsLen; }
23: const char * GetString const { return itsString; }
24:
25: private:
26: String (int); // закрытый конструктор
27: char * itsString;
28: unsigned short itsLen;
29: };
30:
31:
32: // конструктор, заданный no умолчанию, создает строку длиной 0 байт
33: String::String
34: {
35: itsString = new char[1];
36: itsString[0] = '\0' ;
37: itsLen=0;
38: // cout << "\tDefault string constructor\n";
39: // ConstructorCount++;
40: }
41:
42: // закрытый конструктор, используемый только
43: // методами класса для создания новой строки
44: // указанного размера, заполненной значениями NULL.
45: String::String(int len)
46: {
47: itsString = new char[k:.H];
48: for (int i = 0; i<=len; i++)
49: itsString[i] = '\0';
50: itsLen=len;
51: // cout << "\tString(int) constructor\n";
52: // ConstructorCount++;
53: }
54:
55: // Преобразует массив символов в строку
56: String::String(const char * const cString)
57: {
58: itsLen = strlen(cString);
59: itsString = new char[itsLen+1];