C ++

Претоварване на оператора C ++

Претоварване на оператора C ++
Тази статия предоставя ръководство за претоварване на оператора в C++. Претоварването на оператора е полезна и мощна функция на езика за програмиране C ++. C ++ позволява претоварване на повечето вградени оператори. В този урок ще използваме няколко примера, за да демонстрираме механизма за претоварване на оператора.

Какво е Оператор?

Операторът е символ, който указва на компилатора да извърши определена операция. Например има различни видове оператори в C ++, като аритметични оператори, логически оператори, релационни оператори, оператори за присвояване, битови оператори и др.

Какво е претоварване на оператора?

Езикът C ++ позволява на програмистите да придават специални значения на операторите. Това означава, че можете да предефинирате оператора за дефинирани от потребителя типове данни в C++. Например, „+“ се използва за добавяне на вградени типове данни, като int, float и т.н. За да добавите два типа дефинирани от потребителя данни, е необходимо да претоварите оператора „+“.

Синтаксис за претоварване на оператора

C ++ предоставя специална функция, наречена „оператор“ за претоварване на оператора. По-долу е синтаксисът за претоварване на оператора:

клас sampleClass

..
Публично:
символ на оператор returnType (аргументи)
..

..
;

Тук „оператор“ е ключова дума, а „символ“ е операторът, който искаме да претоварим.

Примери

След като разбрахте цялостната концепция за претоварване на оператора, нека преминем през няколко работещи примерни програми, за да разберете тази идея по-конкретно. Ще разгледаме следните примери:

  1. Пример 1: Претоварване на унарния оператор (1)
  2. Пример 2: Претоварване на унарния оператор (2)
  3. Пример 3: Претоварване на двоичен оператор
  4. Пример 4: Претоварване на релационен оператор

Пример 1: Претоварване на унарния оператор (1)

В този пример ще демонстрираме как един единствен оператор може да бъде претоварен в C++. Дефинирахме класа „Square_Box“ и публичните функции, „operator ++ ()“ и „operator ++ (int)“, за да претоварим операторите за инкремент на префикса и postfix. Във функцията “main ()” създадохме обекта “mySquare_Box1.”След това приложихме операторите за инкремент на префикса и постфикса към обекта„ mySquare_Box1 ”, за да демонстрираме претоварването на унарния оператор.

#include
използване на пространство от имена std;
клас Square_Box

частно:
дължина на поплавъка;
ширина на поплавъка;
височина на поплавъка;
публично:
Квадратна кутия ()
Square_Box (плаващ l, плаващ w, плаващ h)

дължина = l;
ширина = w;
височина = h;

// Претоварване на оператора - префикс оператор "++"
void оператор ++ ()

дължина ++;
ширина ++;
височина ++;

// Претоварване на оператора - оператор за постфикс "++"
void оператор ++ (int)

дължина ++;
ширина ++;
височина ++;

изход за празнота ()

Cout << "\tLength = " << length << endl;
Cout << "\tWidth = " << width << endl;
Cout << "\tHeight = " << height << endl;
Cout << endl;

;
int main ()

Square_Box mySquare_Box1 (3.0, 5.0, 6.0);
Cout << "Dimensions of mySquare_Box1 = " << endl;
mySquare_Box1.изход ();
mySquare_Box1 ++;
Cout << "Dimensions of mySquare_Box1 = " << endl;
mySquare_Box1.изход ();
++mySquare_Box1;
Cout << "Dimensions of mySquare_Box1 = " << endl;
mySquare_Box1.изход ();
връщане 0;

Пример 2: Претоварване на унарния оператор (2)

Това е друг пример, в който ще демонстрираме как един единствен оператор може да бъде претоварен в C++. Дефинирахме класа „Square_Box“ и публичните функции „operator - ()“ и „operator - (int)“, за да претоварим операторите за префикс и postfix декремент. Във функцията “main ()” създадохме обекта “mySquare_Box1”. След това сме приложили операторите за дефиниране на префикс и постфикс към обекта “mySquare_Box1”.

#include
използване на пространство от имена std;
клас Square_Box

частно:
дължина на поплавъка;
ширина на поплавъка;
височина на поплавъка;
публично:
Квадратна кутия ()
Square_Box (float l, float w, float h)

дължина = l;
ширина = w;
височина = h;

// Претоварване на оператора - "-" префикс оператор
void operator - ()

дължина--;
ширина--;
височина--;

// Претоварване на оператора - "-" оператор за постфикс
оператор void - (int)

дължина--;
ширина--;
височина--;

невалиден изход ()

Cout << "\tLength = " << length << endl;
Cout << "\tWidth = " << width << endl;
Cout << "\tHeight = " << height << endl;
Cout << endl;

;
int main ()

Square_Box mySquare_Box1 (3.0, 5.0, 6.0);
Cout << "Dimensions of mySquare_Box1 = " << endl;
mySquare_Box1.изход ();
mySquare_Box1--;
Cout << "Dimensions of mySquare_Box1 = " << endl;
mySquare_Box1.изход ();
--mySquare_Box1;
Cout << "Dimensions of mySquare_Box1 = " << endl;
mySquare_Box1.изход ();
връщане 0;

Пример 3: Претоварване на двоичен оператор

Сега ще разгледаме пример за претоварване на двоичен оператор. Синтаксисът за претоварване на двоичен оператор ще бъде малко по-различен от унарното претоварване на оператора. В този пример ще претоварим оператора “+”, за да добавим два обекта “Square_Box”.

#include
използване на пространство от имена std;
клас Square_Box

частно:
дължина на поплавъка;
ширина на поплавъка;
височина на поплавъка;
публично:
Квадратна кутия ()
Square_Box (float l, float w, float h)

дължина = l;
ширина = w;
височина = h;

// Претоварване на оператора - оператор "+"
Оператор Square_Box + (const Square_Box & obj)

Температура на Square_Box;
темп.дължина = дължина + obj.дължина;
темп.width = width + obj.ширина;
темп.височина = височина + obj.височина;
връщане temp;

невалиден изход ()

Cout << "\tLength = " << length << endl;
Cout << "\tWidth = " << width << endl;
Cout << "\tHeight = " << height << endl;
Cout << endl;

;
int main ()

Square_Box mySquare_Box1 (3.0, 5.0, 6.0), mySquare_Box2 (2.0, 3.0, 5.0), резултат;
Cout << "Dimensions of mySquare_Box1 = " << endl;
mySquare_Box1.изход ();
Cout << "Dimensions of mySquare_Box2 = " << endl;
mySquare_Box2.изход ();
резултат = mySquare_Box1 + mySquare_Box2;
Cout << "Dimensions of resultant square box = " << endl;
резултат.изход ();
връщане 0;

Пример 4: Претоварване на релационен оператор

Сега ще разгледаме пример за претоварване на релационен оператор. Синтаксисът за претоварване на релационен оператор е точно като този на претоварването на двоичния оператор. В този пример ще претоварим „<” and “>”Оператори, които да прилагат към обектите“ Square_Box ”.

#include
използване на пространство от имена std;
клас Square_Box

частно:
дължина на поплавъка;
ширина на поплавъка;
височина на поплавъка;
публично:
Квадратна кутия ()
Square_Box (float l, float w, float h)

дължина = l;
ширина = w;
височина = h;

// Претоварване на оператора - "<" operator
bool оператор < (const Square_Box& obj)

ако (дължина < obj.length)
връщане вярно;
друго
върнете false;

// Претоварване на оператора - ">" оператор
bool оператор> (const Square_Box & obj)

if (дължина> obj.дължина)
връщане вярно;
друго
връщане false;

изход за празнота ()

Cout << "\tLength = " << length << endl;
Cout << "\tWidth = " << width << endl;
Cout << "\tHeight = " << height << endl;
Cout << endl;

;
int main ()

Square_Box mySquare_Box1 (2.0, 3.0, 5.0), mySquare_Box2 (4.0, 6.0, 8.0);
bool резултат;
Cout << "Dimensions of mySquare_Box1 = " << endl;
mySquare_Box1.изход ();
Cout << "Dimensions of mySquare_Box2 = " << endl;
mySquare_Box2.изход ();
резултат = mySquare_Box1 < mySquare_Box2;
Cout << "mySquare_Box1 < mySquare_Box2 = " << result < mySquare_Box2;
Cout < mySquare_Box2 = " << result << endl;
връщане 0;

Заключение

C ++ е универсален и гъвкав език за програмиране, който се използва широко в различни домейни. Този език за програмиране поддържа полиморфизъм както по време на компилация, така и по време на изпълнение. Тази статия ви показа как да извършите претоварване на оператора в C++. Това е много полезна функция на C ++, която добавя допълнителни усилия за разработчика да дефинира оператора за претоварване, но определено улеснява живота на потребителя от класа.

Как да използвам AutoKey за автоматизиране на Linux игри
AutoKey е програма за автоматизация на настолни компютри за Linux и X11, програмирана в Python 3, GTK и Qt. Използвайки неговата функционалност за скр...
Как да покажа брояч на FPS в игрите на Linux
Linux игрите получиха голям тласък, когато Valve обяви поддръжка на Linux за Steam клиент и техните игри през 2012 г. Оттогава много AAA и независими ...
Как да изтеглите и пуснете Civilization VI на Сид Майер на Linux
Въведение в играта Civilization 6 е модерен поглед върху класическата концепция, въведена в поредицата от игрите Age of Empires. Идеята беше доста про...