Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП на языке С++.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
2 Мб
Скачать
☆

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

  • Любая бинарная операция  может быть определена двумя способами: либо как компонентная функция с одним параметром, либо как глобальная (возможно дружественная) функция с двумя параметрами. В первом случае xy означает вызов x.operator(y), во втором – вызов operator(x,y).

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

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

Примеры.

1)class person{…};

class adresbook

{

// содержит в качестве компонентных данных

// множество объектов типа person, представляемых как

//динамический массив, список или дерево

public:

//конструкторы, деструктор и другие методы

person& operator[](int); //доступ к i-му объекту

};

person& adresbook : : operator[](int i)

{/*реализация метода*/}

void main()

{class adresbook persons;

class person record;

record = persons[3];

}

2) class person{…};

class adresbook

{ // содержит в качестве компонентных данных

// множество объектов типа person, представляемых как

//динамический массив, список или дерево

public:

//конструкторы, деструктор и другие методы

friend person& operator[](const adresbook&,int); //доступ к

//i-му объекту

};

person& operator[](const adresbook& ob ,int i)

{ /*реализация метода*/}

void main()

{class adresbook persons;

class person record;

record = persons[3];

}

3.3. Перегрузка операций ++ и --

Унарные операции инкремента ++ и декремента – существуют в двух формах: префиксной и постфиксной. В современной спецификации С++ определен способ, по которому компилятор может различить эти две формы. В соответствии с этим способом задаются две версии функции operator++() и operator—(). Они определены следующим образом:

Префиксная форма:

operator++();

operator—();

Постфиксная форма:

operator++(int);

operator—(int);

Указание параметра int для постфиксной формы не специфицирует второй операнд, а используется только для отличия от префиксной формы.

Пример

class person

{ int age;

//другие поля

public:

//конструкторы, деструктор и другие методы

void operator++(){ ++age;}//префиксная форма

void operator++(int){ age++;} // постфиксная форма

};

void main()

{class person jon;

++jon; jon++}

3.4. Перегрузка операции вызова функции

Это операция ‘()’. Она является бинарной операцией. Первым операндом обычно является объект класса, вторым – список параметров.

Пример.

class matriza // двумерный массив вещественных чисел

{

// поля класса

public:

//конструкторы, деструктор и другие методы

double operator()(int,int); //доступ к элементам матрицы по индексам

};

double matriza::operator()(int i,int j)

{/*реализация метода*/}

void main()

{

class matriza a(7,8);//создание матрицы 7*8

double k;

k:=a(5,6);// k получает значение элемента матрицы

//с индексами 5 и 6

}