Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Создание программ на С++.doc
Скачиваний:
15
Добавлен:
29.09.2019
Размер:
1.59 Mб
Скачать

Второй пример

При создании ваших собственных типов данных с помощью классов наиболее общей операцией будет проверка, являются ли два объекта одинаковыми. Используя перегрузку, ваши программы могут перегрузить операторы равенства (==), неравенства (!=) или другие операторы сравнения. Следующая программа COMP_STR.CPP добавляет новый оператор в класс string, который проверяет, равны ли два объекта string.Используя перегрузку операторов, ваши программы могут проверять, содержат ли строковые объекты одинаковые строки, как показано ниже:

if (some_string == another_string)

Ниже приведена реализация программы COMP_STR.CPP:

#include <iostream.h>

#include <string.h>

class string

{  public:     string(char *); // конструктор     char * operator +(char *);     char * operator -(char);     int operator ==(string);     void show_string(void);  private:     char data[256];  };

string::string(char *str)

{     strcpy(data, str);  }

char * string::operator +(char *str)

{     return(strcat(data, str));  }

char * string::operator -(char letter)

{     char temp[256];     int i, j;     for (i = 0, j = 0; data[i]; i++) if (data[i] 1= letter) temp[j++] = data[i];     temp[j] = NULL;     return(strcpy(data, temp));  }

int string::operator ==(string str)

{     int i;     for (i = 0; data[i] == str.data[i]; i++)     if ((data[i] == NULL) && (str.data[i] == NULL)) return(1); // Равно    return (0); //He равно  }

void string::show_string(void)

{     cout << data << endl;  }

void main(void)

{     string title( "Учимся программировать на C++");     string lesson("Перегрузка операторов");     string str( "Учимся программировать на C++");     if (title == lesson) cout << "title и lesson равны" << endl;     if (str == lesson) cout << "str и lesson равны" << endl;     if (title == str) cout << "title и str равны" << endl;  }

Как видите, перегружая операторы подобным образом, вы упрощаете понимание ваших программ.

Операторы, которые Вbl he можете перегрузить

В общем случае ваши программы могут перегрузить почти все операторы С++. В табл. 24 перечислены операторы, которые C++ не позволяет перегружать.

Таблица 24. Операторы C++, которые ваши программы не могут перегрузить.

Оператор

 

Назначение

Пример

.

Выбор элемента

object.member

.*

Указатель на элемент

object.*member

::

Разрешение области видимости

classname::member

?:

Условный оператор сравнения

с = (а > b) ? а : b;

Что вам необходимо знать

Перегрузка операторов — это возможность назначать новый смысл операторам при использовании их с определенным классом. Используя перегрузку операторов, вы можете повысить удобочитаемость ваших программ и облегчить их понимание, выражая операции класса более понятным образом. Из урока 25 вы узнаете, как разделить данные между объектами с помощью элемента static и как использовать методы класса, когда никакие объекты класса не объявляются. До изучения урока 25 убедитесь, что вы освоили следующее:

    1. Чтобы перегрузить оператор, вы должны определить класс, которому оператор будет назначен.

    2. Когда вы перегружаете оператор, перегрузка действует только для класса, в котором он определяется. Если программа использует оператор с неклассовыми переменными (например, переменными типа int или float), используется стандартное определение оператора.

    3. Чтобы перегрузить оператор класса, используйте ключевое слово C++ operator для определения метода класса, который C++ вызывает каждый раз, когда переменная класса использует оператор.

    4. C++ не позволяет вашим программам перегружать оператор выбора элемента (.), оператор указателя на элемент (.*), оператор разрешения области видимости (::) и условный оператор сравнения (?:).