
- •220300 - Системы автоматизированного проектирования
- •Тема 2. Технологии программирования
- •Тема 2. Технология разработки крупных приложений
- •Структуры
- •Структуры и функции
- •Массивы структур
- •Поиск в массиве структур
- •Вложенность структур
- •Рекурсия
- •Алгоритм быстрой сортировки
- •Массивы структур и бинарные файлы
- •Динамические структуры данных
- •Линейные списки
- •Очереди
- •Контрольная работа
- •Объектно-ориентированное программирование. Классы
- •Конструкторы
- •Перегруженные конструкторы
- •Определение методов класса вне класса
- •Объекты, возвращаемые функцией (методом)
- •Структуры и классы
- •Классы и память
- •Статические данные класса
- •Константные методы
- •Деструкторы
- •Массивы и классы
- •Массивы объектов
- •Строки Строковый тип или стандартный класс string
- •Тип строк AnsiString
- •Перегрузка операций
- •Перегрузка арифметических операций
- •Перегрузка операций сравнения
- •Перегрузка операции приведения типа
- •Преобразования объектов в основные типы и наоборот
- •Преобразование объектов классов в объекты других классов
- •Наследование
- •Конструкторы производного класса
- •Перегрузка функций
- •Иерархия классов
- •Общее и частное наследование. Комбинации доступа
- •Множественное наследование
- •Включение. Классы в классах
- •Виртуальные и дружественные функции
- •Абстрактные классы и чистые виртуальные функции
- •Виртуальные деструкторы
- •Виртуальные базовые классы или устранение неоднозначности при множественном наследовании
- •Дружественные функции
- •Дружественные классы
- •Указатель this
- •Многофайловые программы
- •Распознавание нажатых клавиш
Перегрузка операций сравнения
Рассмотрим пример перегрузки операции < в классе Distance для того, чтобы иметь возможность сравнивать объекты этого класса.
class Distance {
private:
int feet;
float inch;
public:
Distance() { feet = 0; inch = 0.0; }
Distance(int f, float i) { feet = f; inch = i; }
void show() const {
cout << feet << "'-" << inch;
}
bool operator< (Distance& d) const; // сравнение двух длин
};
//---------------------------------------------------------------------------
bool Distance::operator< (Distance& d) const {
float o1 = feet + inch / 12;
float o2 = d.feet + d.inch / 12;
if(o1 < o2) return true;
else return false;
}
//---------------------------------------------------------------------------
int main ( ) {
Distance d1(14, 6.25), d2(11, 9.45);
if(d1 < d2) cout << "\nd1 < d2";
else cout << "\nd1 >= d2";
getch(); return 0;
}
В этой программе метод перегрузки операции сравнения имеет возвращаемое значение типа bool. В зависимости от результата сравнения двух объектов возвращаемым значением может быть false или true.
Д/З |
Создайте класс Stroka, в который включите метод перегрузки оператора сравнения (==), который может использовать библиотечную функцию strcmp() для сравнения двух строк. В классе должны быть также методы показа и получения строки. Напишите главную функцию, в которой используется перегруженный оператор для сравнения объектов класса. int main ( ) { String s1 = "да"; String s2 = "нет"; String s3;
cout << "\nВведите 'да' или 'нет': "; s3.getstr( ); // получаем строку от пользователя
if ( s3 == s1 ) cout << "Вы ввели 'да'\n"; … return 0; } |
Ответ |
class Stroka { private: enum { SZ = 70 }; // максимальный размер строки char str[SZ]; // массив для строки public: Stroka ( ) // конструктор без параметров { strcpy(str, ""); } Stroka(char s[ ]) // конструктор с одним параметром { strcpy (str, s); } void display( ) const // показ строки { cout << str; } void getstr( ) // получение строки { cin.get(str, SZ); } bool operator== (Stroka ss) const // оператор сравнения (true если одинаковы) { return (strcmp(str, ss.str) == 0 ) ? true : false; } };
|
Перегрузка операции приведения типа
Операторные функции, осуществляющие преобразование объекта класса к другому типу, имеют формат: operator имя_нового_типа (); . Здесь, тип возвращаемого значения и параметры указывать не требуется. Для преобразований между основными типами и типами, определенными программистом используют два подхода: использование конструктора с одним аргументом при изменении основного типа на определённый пользователем и использование операции преобразования при изменении определённого пользователем типа на основной.