Ц ++

Преоптерећење оператора Ц ++

Преоптерећење оператора Ц ++
Овај чланак даје водич за преоптерећење оператера у језику Ц++. Преоптерећење оператора корисна је и моћна карактеристика програмског језика Ц ++. Ц ++ омогућава преоптерећење већине уграђених оператора. У овом упутству користићемо неколико примера да покажемо механизам преоптерећења оператера.

Шта је Оператор?

Оператор је симбол који указује компајлеру да изврши одређену операцију. На пример, у Ц ++ постоје разне врсте оператора, попут аритметичких оператора, логичких оператора, релационих оператора, оператора додељивања, битовних оператора и још много тога.

Шта је преоптерећење оператора?

Језик Ц ++ омогућава програмерима да оператерима дају посебна значења. То значи да можете поново дефинисати оператора за кориснички дефинисане типове података у језику Ц++. На пример, „+“ се користи за додавање уграђених типова података, као што су инт, флоат итд. Да бисте додали две врсте кориснички дефинисаних података, потребно је преоптеретити оператер „+“.

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

Ц ++ пружа посебну функцију која се назива „оператор“ за преоптерећење оператора. Следи синтакса преоптерећења оператора:

разред самплеЦласс


Јавно:
симбол оператора ретурнТипе (аргументи)



;

Овде је „оператор“ кључна реч, а „симбол“ оператор који желимо да преоптеретимо.

Примери

Сад кад разумете целокупан концепт преоптерећења оператера, прођите кроз неколико радних примера како бисте конкретније разумели ову идеју. Обухватићемо следеће примере:

  1. Пример 1: Унарно преоптерећење оператора (1)
  2. Пример 2: Унарно преоптерећење оператора (2)
  3. Пример 3: Преоптерећење бинарног оператора
  4. Пример 4: Преоптерећење релационог оператора

Пример 1: Унарно преоптерећење оператора (1)

У овом примеру ћемо показати како се унарни оператор може преоптеретити у Ц++. Дефинисали смо класу „Скуаре_Бок“ и јавне функције, „оператор ++ ()“ и „оператор ++ (инт)“, како бисмо преоптеретили и операторе повећања префикса и постфикса. У функцији „маин ()“ креирали смо објекат „миСкуаре_Бок1.”Затим смо применили операторе повећања префикса и постфикса на објекат„ миСкуаре_Бок1 ”да бисмо демонстрирали прекомерно оптерећење унарног оператора.

#инцлуде
коришћење простора имена стд;
класа Скуаре_Бок

приватни:
дужина пловка;
ширина пловка;
висина пловка;
јавно:
Скуаре_Бок ()
Скуаре_Бок (флоат л, флоат в, флоат х)

дужина = л;
ширина = в;
висина = х;

// Преоптерећење оператора - оператер префикса "++"
воид оператор ++ ()

дужина ++;
видтх ++;
висина ++;

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

дужина ++;
видтх ++;
висина ++;

воид оутпут ()

цоут << "\tLength = " << length << endl;
цоут << "\tWidth = " << width << endl;
цоут << "\tHeight = " << height << endl;
цоут << endl;

;
инт маин ()

Скуаре_Бок миСкуаре_Бок1 (3.0, 5.0, 6.0);
цоут << "Dimensions of mySquare_Box1 = " << endl;
миСкуаре_Бок1.оутпут ();
миСкуаре_Бок1 ++;
цоут << "Dimensions of mySquare_Box1 = " << endl;
миСкуаре_Бок1.оутпут ();
++миСкуаре_Бок1;
цоут << "Dimensions of mySquare_Box1 = " << endl;
миСкуаре_Бок1.оутпут ();
ретурн 0;

Пример 2: Унарно преоптерећење оператора (2)

Ово је још један пример у којем ћемо показати како унарни оператор може бити преоптерећен у Ц++. Дефинисали смо класу „Скуаре_Бок“ и јавне функције, „оператор - ()“ и „оператор - (инт)“, како бисмо преоптеретили и операторе декремента префикса и постфикса. У функцији „маин ()“ креирали смо објекат „миСкуаре_Бок1“. Затим смо применили операторе декремента префикса и постфикса на објекат „миСкуаре_Бок1“.

#инцлуде
коришћење простора имена стд;
класа Скуаре_Бок

приватни:
дужина пловка;
ширина пловка;
висина пловка;
јавно:
Скуаре_Бок ()
Скуаре_Бок (флоат л, флоат в, флоат х)

дужина = л;
ширина = в;
висина = х;

// Оператор Оверлоадинг - "-" оператор префикса
воид оператор - ()

дужина--;
видтх--;
висина--;

// Преоптерећење оператора - "-" оператер постфикса
воид оператор - (инт)

дужина--;
видтх--;
висина--;

воид оутпут ()

цоут << "\tLength = " << length << endl;
цоут << "\tWidth = " << width << endl;
цоут << "\tHeight = " << height << endl;
цоут << endl;

;
инт маин ()

Скуаре_Бок миСкуаре_Бок1 (3.0, 5.0, 6.0);
цоут << "Dimensions of mySquare_Box1 = " << endl;
миСкуаре_Бок1.оутпут ();
миСкуаре_Бок1--;
цоут << "Dimensions of mySquare_Box1 = " << endl;
миСкуаре_Бок1.оутпут ();
--миСкуаре_Бок1;
цоут << "Dimensions of mySquare_Box1 = " << endl;
миСкуаре_Бок1.оутпут ();
ретурн 0;

Пример 3: Преоптерећење бинарног оператора

Сада ћемо погледати пример преоптерећења бинарних оператора. Синтакса преоптерећења бинарног оператора ће се донекле разликовати од преоптерећења унарног оператора. У овом примеру ћемо преоптеретити оператор „+“ да бисмо додали два објекта „Скуаре_Бок“.

#инцлуде
коришћење простора имена стд;
класа Скуаре_Бок

приватни:
дужина пловка;
ширина пловка;
висина пловка;
јавно:
Скуаре_Бок ()
Скуаре_Бок (флоат л, флоат в, флоат х)

дужина = л;
ширина = в;
висина = х;

// Преоптерећење оператора - оператор "+"
Скуаре_Бок оператор + (цонст Скуаре_Бок & обј)

Скуаре_Бок темп;
темп.дужина = дужина + обј.дужина;
темп.ширина = ширина + обј.ширина;
темп.висина = висина + обј.висина;
ретурн темп;

воид оутпут ()

цоут << "\tLength = " << length << endl;
цоут << "\tWidth = " << width << endl;
цоут << "\tHeight = " << height << endl;
цоут << endl;

;
инт маин ()

Скуаре_Бок миСкуаре_Бок1 (3.0, 5.0, 6.0), миСкуаре_Бок2 (2.0, 3.0, 5.0), резултат;
цоут << "Dimensions of mySquare_Box1 = " << endl;
миСкуаре_Бок1.оутпут ();
цоут << "Dimensions of mySquare_Box2 = " << endl;
миСкуаре_Бок2.оутпут ();
резултат = миСкуаре_Бок1 + миСкуаре_Бок2;
цоут << "Dimensions of resultant square box = " << endl;
резултат.оутпут ();
ретурн 0;

Пример 4: Преоптерећење релационог оператора

Сада ћемо погледати пример преоптерећења релационог оператора. Синтакса за преоптерећење релационог оператора је слична оној преоптерећења бинарног оператора. У овом примеру ћемо преоптеретити „<” and “>”Оператора да се пријаве за објекте„ Скуаре_Бок ”.

#инцлуде
коришћење простора имена стд;
класа Скуаре_Бок

приватни:
дужина пловка;
ширина пловка;
висина пловка;
јавно:
Скуаре_Бок ()
Скуаре_Бок (флоат л, флоат в, флоат х)

дужина = л;
ширина = в;
висина = х;

// Преоптерећење оператора - "<" operator
боол оператор < (const Square_Box& obj)

ако (дужина < obj.length)
ретурн труе;
иначе
ретурн фалсе;

// Оператор Оверлоадинг - ">" оператор
боол оператор> (цонст Скуаре_Бок & обј)

иф (ленгтх> обј.дужина)
ретурн труе;
иначе
ретурн фалсе;

воид оутпут ()

цоут << "\tLength = " << length << endl;
цоут << "\tWidth = " << width << endl;
цоут << "\tHeight = " << height << endl;
цоут << endl;

;
инт маин ()

Скуаре_Бок миСкуаре_Бок1 (2.0, 3.0, 5.0), миСкуаре_Бок2 (4.0, 6.0, 8.0);
резултат боол;
цоут << "Dimensions of mySquare_Box1 = " << endl;
миСкуаре_Бок1.оутпут ();
цоут << "Dimensions of mySquare_Box2 = " << endl;
миСкуаре_Бок2.оутпут ();
резултат = миСкуаре_Бок1 < mySquare_Box2;
цоут << "mySquare_Box1 < mySquare_Box2 = " << result < mySquare_Box2;
цоут < mySquare_Box2 = " << result << endl;
ретурн 0;

Закључак

Ц ++ је флексибилан програмски језик опште намене који се широко користи у разним доменима. Овај програмски језик подржава полиморфизам и током компајлирања и током извођења. Овај чланак вам је показао како извршити преоптерећење оператора у језику Ц++. Ово је врло корисна карактеристика Ц ++-а која програмеру додаје додатни напор да дефинише оператора за преоптерећење, али дефинитивно олакшава живот корисника класе.

Како променити поставке миша и додирне табле помоћу Ксинпут-а у Линук-у
Већина Линук дистрибуција подразумевано испоручује библиотеку „либинпут“ за обраду улазних догађаја на систему. Може да обрађује улазне догађаје и на ...
Замените тастере миша другачије за различити софтвер помоћу Кс-Моусе Буттон Цонтрол
Можда вам је потребан алат који би могао да промени контролу миша са сваком апликацијом коју користите. Ако је то случај, можете испробати апликацију ...
Преглед бежичног миша Мицрософт Сцулпт Тоуцх
Недавно сам читао о Мицрософт Сцулпт Тоуцх бежични миш и одлучио да га купи. Након што сам га неко време користио, одлучио сам да са њим поделим своје...