Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

10 перегрузка

.pdf
Скачиваний:
14
Добавлен:
27.03.2015
Размер:
414.07 Кб
Скачать

10–71

//ПО конкатенации (+=); склеивание

//левого и правого операндов и запись

//результата в левый операнд

String & String::operator+= (const String & r)

{

// сохранение перед удалением

char *temp = sPtr;

// копирование длины строки

length += r.length;

// выделение памяти

10–72

sPtr = new char [length+1];

// левая часть новой строки

strcpy(sPtr, temp);

// правая часть новой строки

strcat(sPtr, r.sPtr);

// освобождение памяти

delete [] temp;

// для сцепления операций присваивания

return *this;

}

10–73

// ПО проверки: объект пуст?

int String::operator!() const { return length == 0; }

//ПО проверки: левый объект меньше,

//чем правый?

int String::operator<(const String & r) const

{

return strcmp(sPtr, r.sPtr) < 0;

}

10–74

//ПО возвращения ссылки на символ в

//объекте

char & String::operator[](int index)

{

return sPtr[index];

}

// Получение длины строки

int String::getLength() const { return length; }

10–75

// ПО вывода объекта в поток

ostream & operator<<(ostream & output, const String & s)

{

output << s.sPtr; return output;

}

10–76

// ПО ввода объекта из потока

istream & operator>>(istream & input, String & s)

{

// Буфер входных данных

char temp[100]; input >> temp;

10–77

// ПО присваивания

s = temp;

//Здесь конструктор преобразования

//создает из строки temp

//временный объект, затем присваивает

//его объекту s и уничтожает

return input;

}

10–78

int main()

{

//Вызов конструктора преобразования

//char* -> String

String s1(”Привет ”), s2(”студент ”), s3, s4;

// Проверка работы ПО <

cout << ”s2 < s1 дает результат:

<< (s2 < s1) << endl;

10–79

// Проверка работы ПО ! и =

if(!s3)

{

cout << ”s3 пуст

<< ”Объекту s3 присваивается

объект s1:” << endl; s3 = s1;

cout << ”s3 = ” << s3 << endl;

}

10–80

// Проверка работы ПО +=

cout << ”s1 += s2 дает рез-т:” << endl;

s1 += s2;

cout << ”s1 = ” << s1 << endl;

//Проверка работы конструктора

//преобразования

cout << ”s4 = \”НГТУ\” дает результат:

<< endl;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]