Скачиваний:
27
Добавлен:
20.06.2014
Размер:
38.4 Кб
Скачать

Лабораторная работа №3

«Перегрузка операций»

Выполнил: Янковский Д.В.

гр. ПО-41

Коломна, 2011 г.

Исправления ошибок текста программы

  • -исправление описания конструкторов;

  • -добавление конструктора копирования;

  • -добавление перегрузки операции «=»;

Текст программы

#include <iostream>

#include "string.h"

using namespace std;

class String

{ protected:

char *PointerToString; // yказатeль на cтpокy

int StringSize; //Длина cтpоки

public:

String (const char * Str);

String ( String & Str );

~String ( );

void Print();

friend String operator+ ( const String& One, const String& Two );

String& operator= ( const String & Str);

};

// Конcтpyктоp копирования

String::String ( String & Str )

{

StringSize = Str.StringSize;

PointerToString = new char[StringSize + 1];

strcpy ( PointerToString, Str.PointerToString);

}

// Конcтpyктоp преобразования

String::String ( const char * Str )

{

StringSize = strlen(Str);

PointerToString = new char[StringSize + 1];

strcpy ( PointerToString, Str);

}

// Дecтpyктоp

String:: ~String ()

{

StringSize = 0;

delete[] PointerToString;

PointerToString = NULL;

}

// Пepeопpeдeлeниe опepации

String operator+ ( const String& One, const String& Two )

{

String Result(" ");

delete[] Result.PointerToString;

Result.StringSize = One.StringSize + Two.StringSize;

Result.PointerToString = new char[Result.StringSize+1];

strcpy(Result.PointerToString, One.PointerToString);

memcpy(Result.PointerToString+One.StringSize,Two.PointerToString,Two.StringSize+1 );

return Result;

}

String& String::operator= ( const String & Str )

{

if (&Str==this) return *this;

StringSize = Str.StringSize;

PointerToString = new char[StringSize + 1];

strcpy ( PointerToString, Str.PointerToString);

return *this;

}

// Опpeдeлeниe фyнкции вывода объeкта

void String ::Print()

{

cout << PointerToString <<endl;

}

// Пpогpамма, пpовepяющая pаботоcпоcобноcть опepации "+"'

void main()

{

String A("111");

A="000";

A.Print();

String B("222");

B.Print();

String C(" ");

C = A + B;

C.Print();

C = "A" + A + "B";

C.Print();

system("pause");

}

Контрольные вопросы

    1. Для чего предназначена перегрузка операций ?

Возможность использования в различных случаях для одной и той же операции операндов различных типов.

    1. Какие ограничения существуют при перегрузке ?

• Нельзя изменять количество параметров оператора. Например, нельзя переопределить унарную операцию как бинарную и наоборот

• Нельзя изменять старшинство операторов

• Нельзя определять новые операторы

• Нельзя переопределять операторы принимающие в качестве параметров стандартные типы данных языка, такие как int или char

• Нельзя переопределять следующие операторы: (.), (.*), (::), (?:), а также символы, обрабатываемые препроцессором (символы комментария и т. д.).

    1. Как может быть перегружена операция "=" ?

Операция присваивания "=" может перегружаться только объявлением метода без описателя static.

    1. Каковы особенности перегрузки операций различной размерности ?

Использование дружественных функций

    1. Какое свойство языка Си++ и как используется при доопределении операций ?

Свойство полиморфизм, т. е. возможности использования в различных случаях для одной и той же операции операндов различных типов.

    1. Каким образом можно использовать перегруженные операции ?

Перегрузка смысла операций осуществляется посредством определения соответствующих функций, определяющих алгоритм выполнения операции над объектами классов.

Соседние файлы в папке Отчеты