Читайте также:
|
|
Арифметические операции
Если мы могли складывать два объекта определенного класса с помощью какой-либо ф-ии, то используя перегрузку можно записать: а3 = а1+а2.
Для использования перегруженной операции используется ключевое слово operator. Сначала пишут возвращаемы тип / ключевое слово / затем саму операцию и потом список аргументов, заключенных в скобка.
Объявление метода operator+() в классе Ж выглядит: Ж operator+ (Ж); эта операция возвращает значение типа Ж и принимает один аргумент. (ж3 = ж1+ж2).
Существует правило: объект, стоящий с лавой стороны операции, вызывает ф-ию оператора. Оператор, стоящий справа – должен быть передан в ф-ию в качестве аргумента. Операция возвращает значение, которое мы потом используем для своих нужд. Требуется количество аргументов на один меньше, чем количество операторов.
С помощью перегруженной операции можно складывать строки.
String operator+ (String ss) const
{ String temp; // временная переменная
if (strlen (str) + strlen (ss.str) < SZ)
{ strcpy (temp.str, str); // копируем содержимое первой строки
strcat (temp.str, ss.str); // добавляем содержимое второй строки
}
else
{ cout << "\nПереполнение!";
exit (1);
}
return temp; // возвращаем результат
}
Операции сравнения
Подход, используемый для функции operator<(), похож на перегрузку операции +, за исключением того, что эта операция имеет возвращаемый тип bool. Т.е. возвращаемым значением может быть false или true. Здесь используется операция условия: return (f1 < f2)? true: false;
Сравнение строк: operator==().
22) Перегрузка операций индексации массивов []
Обычно используется для доступа к элементам массива. Перегрузка операции индексации должна возвращать свое значение по ссылке.
Данные помещаются в массив с помощью одного метода и выводятся на дисплей с помощью другого метода. Безопасность массива реализована с помощью вывода сообщения об ошибке при попытке использования индекса, не входящего в границы массива.
Мы можем использовать один метод для вставки и вывода элементов массива. Здесь используется возвращение значения по ссылке.
int& access (int n)
{
if (n < 0 || n >= LIMIT)
{ cout << "\nОшибочный индекс!"; exit (1); }
return arr [ n ];
}
Существует способ вовсе без имен.
int& operator[ ] (int n)
{
if (n < 0 || n >= LIMIT)
{ cout << "\nОшибочный индекс!"; exit (1); }
return arr [ n ];
}
Перегруженная ф-ия должна возвращать свое значение по ссылке. В этом случае мы можем использовать обычную запись индексации массива: sa1[ j ] = j * 10, temp = sa1 [ j ].
Дата добавления: 2015-08-17; просмотров: 67 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Строки на основе массива типа char и класса string | | | Преобразование типов от основного к пользовательскому. |