Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
5
Добавлен:
31.05.2025
Размер:
284 Кб
Скачать
☆

Подобным образом можно перегрузить ++ и -- : vector operator ++ (void)

vector vector :: operator ++ (void) {x++;

y++;

z++;

return *this;}

Чтобы отличить префиксную операцию от постфиксной, в постфиксной добавляют фиктивный целочисленный указатель при описании функции операции:

vector vector :: operator++(int) {vector tmp;

tmp=*this;

x++;

y++;

z++; return tmp;}

Значение координат увеличивается, но возвращается старое значение объектов.

10.5 Дружественные функции-операции

Отличие состоит в том, что нельзя использовать скрытый указатель this. Для бинарных операций должны передаваться два аргумента, для

унарных – один аргумент.

# include <iostream.h> class vector (int x,y,z;

public: friend vector operator+(vector t); vector operator = (vector t);

void show(void);

void assign(int mx, int my, int mz);}; vector operator+(vector t1, vector t2) {vector tmp;

temp.x=t1.x+t2.x;

temp.y=t1.x+t2.y;

temp.z=t1.x+t2.z; return temp;}

Перегрузку операции умножения объекта типа vector на целое можно записать и функцией-членом и дружественной функцией. Операцию

умножения целого на vector можно определить только через дружественную функцию.

10.6 Использование ссылочных переменных

Перегрузка унарных операций

Декремент дружественной функции требует использования ссылки.

Friend vector operator ++ (vector &opl) {opl.x++;

opl. y++; opl.z++; return opl;}

Перегрузка операции индексации []

Индексация — бинарная операция, где первый операнд — объект класса, второй — целочисленный индекс. Перегрузка операции индексации позволяет работать с элементами объекта vector, как с элементами массива.

#include <iostream.h> class vector {int v[3];

public: vector(int a=0; int b=0; int c=0) {v[0]=a;

v[1]=b;

v[2]=c;}

vector operator +(vector t); vector operator =(vector t); int & operator[](int i); void show(void);};

vector vector::operator+(vector t) {vector tmp;

for (int i=0; i<3; i++) tmp.v[i]=t.v[i]+v[i] return tmp;}

vector vector::operator=(vector t) {vector tmp;

for (int i=0;i<3;i++) v[i]=t.v[i];

return *this;}

int &vector::operator[](int i) {return v[i];}

void vector::show(void)

{for (int i=0;i<3;i++) cout<<v[i];}

main(void)

{vector v1(1,2,3), v2(10,11,12),v3; v3=v1+v2;

for (int i=0;i<3;i++) cout<<v3[i]; v3.show(); v1[0]=100; v1[1]=201; v2[2]=302; v1.show();}

9. АРГУМЕНТЫ ПО УМОЛЧАНИЮ

Аргументы по умолчанию являются вспомогательным средством, как и перегрузка функций. Обе возможности позволяют использовать одно имя функции в разных ситуациях. Различие состоит в том, что при определении аргументов по умолчанию компилятор сам подставляет аргументы.

Вспомним перегруженные конструкторы в классе data: date (int day, int month, int year);

date (int); date (void);

Все три функции можно заменить одной, если считать, что по умолчанию дата устанавливается 01 января 2000 г.

date (int day=1, int month=12, int year=2000);

Вновой версии определения объектов дают одинаковые результаты. date A(1,12,200); date B(1); date C();

Вобоих случаях вызывается один и тот же конструктор, но для В компилятор автоматически подставляет второй и третий аргумент, для С – все три аргумента. Аргументы по умолчанию и перегруженные функции позволяют использовать одно имя в разных ситуациях. Различие состоит в том, что при определении аргументов по умолчанию компилятор сам подставляет аргументы. Как правило, если поведение функций не сильно отличается, следует использовать значения аргументов по умолчанию.

Используя аргументы по умолчанию, необходимо помнить о двух правилах. Во-первых, значения по умолчанию могут назначаться только для аргументов, завершающих список. Нельзя объявить аргумент по умолчанию,

за которым будет следовать аргумент с явно задаваемым значением. Вовторых, после первого аргумента по умолчанию все последующие аргументы в списке также должны быть аргументами по умолчанию.

Пример.

 

date D( , ,200); date E(8, , 2018);

/ выдаёт сообщение об ошибке

Соседние файлы в папке Информатика