ВУЗ:
Составители:
Рубрика:
120
complex operator + (complex a, complex b){
complex result;
result.real () = a.real () + b.real ();
result.imag () = a.imag () + b.imag ();
return result;}
Здесь оба аргумента функции operator + () передаются по значе-
нию, то есть выполняется копирование четырех чисел типа double. По-
добные затраты могут оказаться слишком накладными, особенно если
операция переопределяется над таким, например, классом, как “матри-
ца“.
Можно было бы попытаться избежать накладных расходов, пере-
давая по значению не сами объекты, а указатели на них:
complex operator + (complex* a, complex *b){. . .}
Но так поступать нельзя, так как оба аргумента теперь являются
объектами стандартного типа – указателями, а переопределение опера-
ций для стандартных типов запрещено.
В этой ситуации необходимо использовать ссылки – они не изме-
няют тип операндов, а только влияют на механизм передачи парамет-
ров:
complex operator + (complex &a, complex &b){
complex result;
resul.real () = a.real () + b.real ();
result.imag () = a.imag () + b.imag ();
return result;
}
Тело функции operator + () при этом не изменилось.
Пример: определение операции + для класса stroka:
class stroka {
char *c; // Указатель на строку.
int len; // Длина строки.
public:
stroka (int N = 80): len (0) // Строка, не содержащая информа-
цию;
{i = new char [N +1]; // выделение памяти для массива.
c[0] = ‘\0‘;
} // Конструктор выделяет память для строки и делает ее пустой.
Страницы
- « первая
- ‹ предыдущая
- …
- 116
- 117
- 118
- 119
- 120
- …
- следующая ›
- последняя »
