Шта је Оператор?
Оператор је симбол који указује компајлеру да изврши одређену операцију. На пример, у Ц ++ постоје разне врсте оператора, попут аритметичких оператора, логичких оператора, релационих оператора, оператора додељивања, битовних оператора и још много тога.
Шта је преоптерећење оператора?
Језик Ц ++ омогућава програмерима да оператерима дају посебна значења. То значи да можете поново дефинисати оператора за кориснички дефинисане типове података у језику Ц++. На пример, „+“ се користи за додавање уграђених типова података, као што су инт, флоат итд. Да бисте додали две врсте кориснички дефинисаних података, потребно је преоптеретити оператер „+“.
Синтакса за преоптерећење оператора
Ц ++ пружа посебну функцију која се назива „оператор“ за преоптерећење оператора. Следи синтакса преоптерећења оператора:
разред самплеЦласс…
Јавно:
симбол оператора ретурнТипе (аргументи)
…
…
;
Овде је „оператор“ кључна реч, а „симбол“ оператор који желимо да преоптеретимо.
Примери
Сад кад разумете целокупан концепт преоптерећења оператера, прођите кроз неколико радних примера како бисте конкретније разумели ову идеју. Обухватићемо следеће примере:
- Пример 1: Унарно преоптерећење оператора (1)
- Пример 2: Унарно преоптерећење оператора (2)
- Пример 3: Преоптерећење бинарног оператора
- Пример 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;
Закључак
Ц ++ је флексибилан програмски језик опште намене који се широко користи у разним доменима. Овај програмски језик подржава полиморфизам и током компајлирања и током извођења. Овај чланак вам је показао како извршити преоптерећење оператора у језику Ц++. Ово је врло корисна карактеристика Ц ++-а која програмеру додаје додатни напор да дефинише оператора за преоптерећење, али дефинитивно олакшава живот корисника класе.