Второй пример
При создании ваших собственных типов данных с помощью классов наиболее общей операцией будет проверка, являются ли два объекта одинаковыми. Используя перегрузку, ваши программы могут перегрузить операторы равенства (==), неравенства (!=) или другие операторы сравнения. Следующая программа 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; }
Как видите, перегружая операторы подобным образом, вы упрощаете понимание ваших программ.
- 25. Понятие объекта и класса.
- Определение методов класса
- Переопределение операций
- Подписи методов и необязательные аргументы
- Запись классов
- 26. Скрытие данных и общий интерфейс.
- 27. Конструкторы и деструкторы Инициализация объектов класса: конструкторы
- Основное назначение конструкторов - инициализация объектов.
- Использование конструкторов с аргументами по умолчанию
- Если параметры не передаются конструктору, в определении объекта не нужно включать пустые круглые скобки.
- Использование деструкторов
- Когда вызываются конструкторы и деструкторы.
- 28. Перегрузка классов.
- Перегрузка операторов плюс и минус
- Второй пример
- Операторы, которые Вbl he можете перегрузить
- 29. Дружественные классы.
- 30. Наследование.
- Внутреннее и защищенное наследование
- Виртуальное наследование
- 31. Множественное наследование.
- 32. Полиморфизм.
- 33. Виртуальная функция.
- 34. Передача данных по умолчанию.
- 39. Создание и уничтожение динамических объектов.
- 40. Динамические библиотеки (dll).