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

10.Перегрузка операций (операторов). Понятие перегрузки операторов. Синтаксис перегрузки операции. Перегрузка бинарных операторов.

Суть перегрузки операций — одна операция используется с различными типами данных. В C++, например, при помощи операции + можно сложить комплексные числа, матрицы или символьные строки.

Пример: (4 - j4) + (5 + j10); (15 20' SY45"SY) + (53 57' 40"); "combine" + "strings"

В C++ можно перегружать множество операций. Например:+,-,/,*,=,<,>,== и мн. др.

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

Для перегрузки операции используется ключевое слово operator, за которым следует сама операция:

тип operator операция (список параметров)

Например: angle_value operator +(angle_argument);

Здесь angle_value — название типа класса, за ним следуют ключевое слово operator, символ самой операции (+) и параметр, передаваемый перегруженной операции.

Рассмотрим синтаксис перегрузки бинарных операторов. Перегрузим один оператор, который возвращает l-значение, один условный оператор и один оператор, создающий новое значение (определим их глобально):

class Integer

{

private:

int value;

public:

Integer(int i): value(i)

{}

friend const Integer operator+(const Integer& left, const Integer& right);

friend Integer& operator+=(Integer& left, const Integer& right);

friend bool operator==(const Integer& left, const Integer& right);

};

const Integer operator+(const Integer& left, const Integer& right) {

return Integer(left.value + right.value); }

Integer& operator+=(Integer& left, const Integer& right) {

left.value += right.value;

return left; }

bool operator==(const Integer& left, const Integer& right) {

return left.value == right.value;}

11. Перегрузка операций (операторов). Перегрузка операторов отношения и логических операторов. Перегрузка оператора присваивания. Перегрузка унарных операторов.

1. Суть перегрузки операций — одна операция используется с различными типами данных. В C++, например, при помощи операции + можно сложить комплексные числа, матрицы или символьные строки.

Пример: (4 - j4) + (5 + j10); (15 20' SY45"SY) + (53 57' 40"); "combine" + "strings"

В C++ можно перегружать множество операций. Например:+,-,/,*,=,<,>,== и мн. др.

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

Для перегрузки операции используется ключевое слово operator, за которым следует сама операция:

тип operator операция (список параметров)

Например: angle_value operator +(angle_argument);

Здесь angle_value — название типа класса, за ним следуют ключевое слово operator, символ самой операции (+) и параметр, передаваемый перегруженной операции.

2. class three_d {

int x, y, z;

public:

three_d() { x = y = z = 0; }

three_d(int i, int j, int k) { x = i; y = j; z = k; }

bool three_d::operator==(three_d op2);

bool three_d::operator<(three_d op2);

bool three_d::operator>(three_d op2);

bool three_d::operator&&(three_d op2);

bool three_d::operator||(three_d op2);

};

bool three_d::operator==(three_d op2)

{

if((x = op2.x) && (y == op2.y) && (z == op2.z))

return true;

else

return false;

}

…….

3. Пример перегрузки оператора ‘=’ для присваивания строки показан ниже:

class Integer

{

private:

int value;

public:

Integer(int i): value(i)

{}

Integer& operator=(const Integer& right) {

//проверка на самоприсваивание

if (this == &right) {

return *this;

}

value = right.value;

return *this;

}

};

4. class apple{

public:

apple( void ){x=0;}

int x;

apple operator++( void );

friend apple operator++( apple );

};

apple operator ++( apple a ){

a++;

return( a );}

apple apple::operator ++( void ){

x++;

return( *this );}