Чтение онлайн

на главную

Жанры

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

Либерти Джесс

Шрифт:

59: itsString = new char[itsLen+1];

60: for (int i = 0; i<itsLen; i++)

61: itsString[i] = cString[i];

62: itsString[itsLen]='\0';

63: // cout << "\tString(char*) constructor\n";

64: // ConstructorCount++;

65: }

66:

67: // конструктор-копировщик

68: String::String (const String & rhs)

69: {

70: itsLen=rhs.GetLen;

71: itsString = new char[itsLen+1];

72: for (int i = 0; i<itsLen;i++)

73: itsString[i] = rhs[i];

74: itsString[itsLen] = '\0';

75: // cout << "\tString(String&) constructor\n

76: // ConstructorCount++;

77: }

78:

79: //

деструктор освобождает занятую память

80: String::~String

81: {

82: delete [] itsString;

83: itsLen = 0;

84: // cout << "\tString destructor\n";

85: }

86:

87: // этот оператор освобождает память, а затем

88: // копирует строку и размер

89: String& String::operator=(const String & rhs)

90: {

91: if (this == &rhs)

92: return *this;

93: delete [] itsString;

94: itsLen=rhs.GetLen;

95: itsString = new char[itsLen+1];

96: for (int i = 0; i<itsLen;i++)

97: itsString[i] = rhs[i];

98: itsString[itsLen] = '\0';

99: return *this;

100: // cout << "\tString operator=\n";

101: }

102:

103: // неконстантный оператор индексирования,

104: // возвращает ссылку на символ, который можно

105: // изменить

106: char & String::operator[](int offset)

107: {

108: if (offset > itsLen)

109: return itsString[itsLen-1];

110: else

111: return itsStnng[offset];

112: }

113:

114: // константный оператор индексирования,

115: // используется для константных объектов (см. конструктор-копировщик!)

116: char String::operator[](int offset) const

117: {

118: if (offset > itsLen)

119: return itsString[itsLen-1];

120: else

121: return itsString[offset];

122: }

123:

124: // создает новую строку, добавляя текущую

125: // строку к rhs

126: String String::operator+(const String& rhs)

127: {

128: int totalLen = itsLen + rhs.GetLen;

129: String temp(totalLen);

130: int i, j;

131: for (i = 0; i<itsLen; i++)

132: temp[i] = itsString[i];

133: for (j = 0: j<rhs.GetLen; j++, i++)

134: temp[i] = rhs[j];

135: temp[totalLen]='\0';

136: return temp;

137: }

138:

139: // изменяет текущую строку, ничего не возвращая

140: void String::operator+=(const String& rhs)

141: {

142: unsigned short rhsLen = rhs.GetLen;

143: unsigned short totalLen = itsLen + rhsLen;

144: String temp(totalLen);

145: int i, j;

146: for (i = 0; i<itsLen; i++)

147: temp[i] = itsString[i];

148: for (j = 0; j<rhs.GetLen; j++, i++)

149: temp[i] = rhs[i-itsLen];

150: temp[totalLen]='\0';

151: *this = temp;

152: }

153:

154: // int String::ConstructorCount = 0;

Результат:

Нет

Анализ: Представленный в листинге 15.1 класс String напоминает другой класс, использованный в листинге 12.12. Однако есть одно важное отличие между этими двумя классами: конструкторы и некоторые функции листинга 12.12 включали операторы вывода на печать, благодаря которым на экране отображались сообщения об их использовании. В листинге 15.1 эти операторы временно заблокированы, но они будут использоваться в следующих примерах.

Статическая переменная-член ConstructorCount объявляется и инициализируется соответственно в строках 23 и 154. Значение этой переменной увеличивается на единицу при вызове любого конструктора класса String. Эти функции также заблокированы и будут использоваться в следующих листингах.

В листинге 15.2 объявляется класс Employee, содержащий три объекта класса String.

Листинг 15.2. Класс Employee

1: #include "String.hpp"

2:

3: class Employee

4: {

5:

6: public:

7: Employee;

8: Employee(char *, char *, char >>, long);

9: ~Employee;

10: Employee(const Employee&);

11: Employee & operator= (const Employee &);

12:

13: const String & GetFirstName const

14: { return itsFirstName; }

15: const String & GetLastName const { return itsLastName; }

16: const String & GetAddress const { return itsAddress; }

17: long GetSalary const { return itsSalary; } 18;

19: void SetFirstName(const String & fNama)

20: { itsFirstName = fName; }

21: void SetLastName(const String & lNama)

22: { itsLastName = lNamo; }

23: void SetAddress(const String & address)

24: { itsAddress = address; }

25: void SetSalary(long salary) { itsSalary = salary; }

26: private:

27: String itsFirstName;

Поделиться:
Популярные книги

Охотник за головами

Вайс Александр
1. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
Охотник за головами

Ты не мой BOY

Рам Янка
5. Самбисты
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Ты не мой BOY

Третий. Том 2

INDIGO
2. Отпуск
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
Третий. Том 2

Последний попаданец

Зубов Константин
1. Последний попаданец
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Последний попаданец

Ветер и искры. Тетралогия

Пехов Алексей Юрьевич
Ветер и искры
Фантастика:
фэнтези
9.45
рейтинг книги
Ветер и искры. Тетралогия

Авиатор: назад в СССР 10

Дорин Михаил
10. Покоряя небо
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Авиатор: назад в СССР 10

Темный Лекарь 4

Токсик Саша
4. Темный Лекарь
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Темный Лекарь 4

Сердце Дракона. Том 20. Часть 1

Клеванский Кирилл Сергеевич
20. Сердце дракона
Фантастика:
фэнтези
боевая фантастика
городское фэнтези
5.00
рейтинг книги
Сердце Дракона. Том 20. Часть 1

Идеальный мир для Лекаря 12

Сапфир Олег
12. Лекарь
Фантастика:
боевая фантастика
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 12

Законы Рода. Том 7

Flow Ascold
7. Граф Берестьев
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Законы Рода. Том 7

Новик

Ланцов Михаил Алексеевич
2. Помещик
Фантастика:
альтернативная история
6.67
рейтинг книги
Новик

Последний из рода Демидовых

Ветров Борис
Фантастика:
детективная фантастика
попаданцы
аниме
5.00
рейтинг книги
Последний из рода Демидовых

Идеальный мир для Лекаря 3

Сапфир Олег
3. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 3

Титан империи 3

Артемов Александр Александрович
3. Титан Империи
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Титан империи 3