C++ OperaПерегрузка tor примерами

Что такое Operator Перегрузка?

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

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

Синтаксис

Чтобы перегрузить C++ оператора, необходимо определить специальную функцию внутри класса следующим образом:

class class_name
{
    ... .. ...
    public
       return_type operator symbol (argument(s))
       {
           ... .. ...
       } 
    ... .. ...
};

Вот объяснение приведенного выше синтаксиса:

  • return_type — это тип возвращаемого значения функции.
  • Далее вы упоминаете ключевое слово оператора.
  • Символ обозначает символ оператора, который необходимо перегрузить. Например, +, -, <, ++.
  • Аргумент(ы) можно передавать операторной функции так же, как и функции.

Пример 1

#include <iostream>
using namespace std;
class TestClass {
private:
	int count;
public:
	TestClass() : count(5) {}
	void operator --() {
		count = count - 3;
	}
	void Display() { 

		cout << "Count: " << count; }
};

int main() {
	TestClass tc;
	--tc;
	tc.Display();
	return 0;
}

Вывод:

Operaперегрузка tor

Вот скриншот кода:

Operaперегрузка tor

Пояснение к коду:

  1. Включение заголовочного файла iostream в наш код для использования его функций.
  2. Включите пространство имен std в нашу программу, чтобы использовать его классы, не вызывая его.
  3. Создайте класс с именем TestClass.
  4. Используйте модификатор частного доступа, который помечает член класса как доступный частным образом.
  5. Создайте целочисленную переменную count. Эта переменная будет доступна в частном порядке.
  6. Используйте модификатор общего доступа, который помечает член класса как доступный частным образом.
  7. Используйте конструктор класса, чтобы инициализировать счетчик переменной значением 5.
  8. Перегрузите значение оператора —.
  9. Оператор уменьшит значение переменной x на 1.
  10. Конец раздела перегрузки операторов. Оператору присвоено новое имя.
  11. Определение функции с именем Display().
  12. Выведите значение счетчика переменных вместе с другим текстом на консоли при вызове функции Display(). } отмечает конец тела функции Display().
  13. Конец тела класса.
  14. Вызовите функцию main(). Логика программы должна быть добавлена ​​в эту функцию.
  15. Создайте экземпляр класса TestClass и присвойте ему имя tc.
  16. Это вызовет функцию оператора void –().
  17. Используйте позицию класса TestClass для вызова функции Display().
  18. Функция должна возвращать значение после успешного завершения.
  19. Конец тела функции main().

Различные подходы к Operator Перегрузка в C++

Вы можете выполнить перегрузку операторов, реализовав любой из следующих типов функций:

  1. Функция члена
  2. Функция, не являющаяся членом
  3. Функция друга
  • Функция перегрузки оператора может быть функцией-членом, если левый операнд является объектом класса.
  • Когда левый операнд отличается, OperaФункция перегрузки tor не должна быть функцией-членом.

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

Могут ли все C++ OperaТоры будут перегружены?

Нет. Есть C++ операторы, которые нельзя перегружать.

Они включают в себя:

  • :: -Оператор разрешения области видимости
  • ?: -тернарный оператор.
  • . - выбор участников
  • Оператор размера
  • * -селектор указателя члена

То, что нужно запомнить

  1. С помощью перегрузки операторов вы можете переопределить способ работы операторов только для определяемых пользователем типов (объектов, структур). Вы не можете использовать его для встроенных типов (float, char, int и т. д.).
  2. = и & C++ Операторы перегружены по умолчанию. Например, вы можете копировать объекты одного и того же класса напрямую, используя оператор =.
  3. OperaПриоритет tor не меняет ассоциативность и приоритет операторов. Однако вы можете изменить порядок оценки с помощью скобок.
  4. Есть четыре оператора, которые нельзя перегружать. C++. Они включают в себя оператор разрешения области действия (::), оператор выбора члена (.), оператор выбора члена через указатель на функцию (.*) и тернарный оператор (?:).

Правила Operaперегрузка tor

Вот правила для OperaПерегрузка Тора:

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

Как перегрузить Operaтор

Пример 1

#include <iostream>   
using namespace std;
class OperatorOverload {
private:
	int x;

public:
	OperatorOverload() : x(10) {}
	void operator ++() {
		x = x + 2;
	}
	void Print() {
		cout << "The Count is: " << x;
		}
};
int main() {
	OperatorOverload ov;
	++ov;   
	ov.Print();
	return 0;
}

Вывод:

Перегрузка OperaПример Тора

Вот скриншот кода:

Перегрузка OperaПример Тора

Пояснение к коду:

  1. Включение заголовочного файла iostream в наш код для использования его функций.
  2. Включите пространство имен std в нашу программу, чтобы использовать его классы, не вызывая его.
  3. Создайте класс с именем OperatorOverload.
  4. Используйте модификатор частного доступа, который помечает член класса как доступный частным образом.
  5. Создайте целочисленную переменную x. Эта переменная будет доступна в частном порядке.
  6. Используйте модификатор общего доступа, который помечает член класса как доступный частным образом.
  7. Используйте конструктор класса для инициализации переменной x значением 10.
  8. Перегрузите смысл оператора ++.
  9. Оператор увеличит значение переменной x на 2.
  10. Конец раздела перегрузки операторов. Оператору присвоено новое имя.
  11. Вызов функции Print().
  12. Выведите значение переменной x вместе с другим текстом на консоли при вызове функции Print().
  13. Конец тела функции Print().
  14. Конец тела класса.
  15. Вызовите функцию main(). Логика программы должна быть добавлена ​​в эту функцию.
  16. Создайте экземпляр OperatorOverload Класс с именем ov.
  17. Это вызовет функцию оператора void ++().
  18. Используйте позицию OperatorOverload для вызова функции Print().
  19. Функция должна возвращать значение после успешного завершения.
  20. Конец тела функции main().

Пример 2

#include<iostream> 
using namespace std;

class TestClass {
private:
	int real, over;
public:
	TestClass(int rl = 0, int ov = 0) {
		real = rl;
		over = ov;
	}

	TestClass operator + (TestClass const &obj) {
		TestClass result;
		result.real = real + obj.real;
		result.over = over + obj.over;
		return result;
	}
	void print() {
		cout << real << " + i" << over << endl;
	}
};
int main()
{
	TestClass c1(9, 5), c2(4, 3);
	TestClass c3 = c1 + c2;
	c3.print();
}

Вывод:

Перегрузка OperaПример Тора

Вот скриншот кода:

Перегрузка OperaПример Тора

Пояснение к коду:

  1. Включаем заголовочный файл iostream в нашу программу, чтобы использовать его функции.
  2. Включите пространство имен std в нашу программу, чтобы использовать его классы, не вызывая его.
  3. Создайте класс с именем TestClass. { отмечает начало тела класса.
  4. Используйте модификатор доступа Private, чтобы пометить переменные как частные, то есть доступ к ним возможен только внутри класса.
  5. Определите две целочисленные переменные: вещественную и более.
  6. Используйте модификатор доступа public, чтобы пометить конструктор как общедоступный, то есть он будет доступен даже за пределами класса.
  7. Создание конструктора класса и инициализация переменные.
  8. Инициализируйте значение переменной real.
  9. Инициализируйте значение переменной заново.
  10. Конец тела конструктора.
  11. Переопределить значение оператора +.
  12. Создайте результат типа данных типа TestClass.
  13. Используйте оператор + с комплексными числами. Эта строка добавит действительную часть числа к действительной части другого числа.
  14. Используйте оператор + с комплексными числами. Эта строка добавит мнимую часть числа к мнимой части другого числа.
  15. Программа вернет значение переменной result при успешном выполнении.
  16. Конец определения нового значения оператора +, то есть перегрузки.
  17. Вызовите метод print().
  18. Выведите новое комплексное число после сложения на консоли.
  19. Конец тела функции print().
  20. Конец тела класса TestClass.
  21. Вызов функции main().
  22. Передача значений как реальных, так и сложных частей, которые нужно добавить. Первая часть с1 будет добавлена ​​к первой части с2, то есть 9+4. Вторая часть c1 будет добавлена ​​ко второй части c, то есть 5+3.
  23. Выполнение операции с использованием перегруженного оператора + и сохранение результата в переменной c3.
  24. Вывод значения переменной c3 на консоль.
  25. Конец тела функции main().

Резюме

  • Вы можете указать более одного значения для C++ оператор в одном объеме.
  • Это называется перегрузкой операторов.
  • OperaПерегрузка tor обеспечивает особое значение оператора для определяемого пользователем типа данных.
  • Вы можете переопределить большинство C++ операторов посредством перегрузки операторов.
  • Не все C++ операторы могут быть перегружены.
  • Чтобы оператор был перегружен, хотя бы один из операндов должен быть определяемым пользователем объектом.
  • Перегружаться могут только существующие операторы. Вы не можете перегружать новые операторы.