Читаем Освой самостоятельно С++ за 21 день. полностью

Перегрузка оператора вывода

Настало время снабдить наш класс 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];

Перейти на страницу:

Похожие книги

Сущность технологии СОМ. Библиотека программиста
Сущность технологии СОМ. Библиотека программиста

В этой книге СОМ исследуется с точки зрения разработчика C++. Написанная ведущим специалистом по модели компонентных объектов СОМ, она раскрывает сущность СОМ, помогая разработчикам правильно понять не только методы модели программирования СОМ, но и ее основу. Понимание мотивов создания СОМ и ее аспектов, касающихся распределенных систем, чрезвычайно важно для тех разработчиков, которые желают пойти дальше простейших приложений СОМ и стать по-настоящему эффективными СОМ-программистами. Показывая, почему СОМ для распределенных систем (Distributed СОМ) работает именно так, а не иначе, Дон Бокс дает вам возможность применять эту модель творчески и эффективно для ежедневных задач программирования.

Дональд Бокс

Программирование, программы, базы данных / Программирование / Книги по IT