Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по Технологии разработки ПО 2005.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
833.54 Кб
Скачать

Перегрузка операций сравнения

Рассмотрим пример перегрузки операции < в классе 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 имя_нового_типа (); . Здесь, тип возвращаемого значения и параметры указывать не требуется. Для преобразований между основными типами и типами, определенными программистом используют два подхода: использование конструктора с одним аргументом при изменении основного типа на определённый пользователем и использование операции преобразования при изменении определённого пользователем типа на основной.