Ц ++ је флексибилни програмски језик опште намене. Овај програмски језик првобитно је креирао Бјарне Строуструп, дански информатичар, давне 1985. године. Ц ++ подржава полиморфизам, наслеђивање и још много тога. Овај чланак покрива преоптерећење функција ради постизања полиморфизма времена компајлирања у програмском језику Ц ++.
Шта је функција?
Функција није ништа друго него одређени комад кода који извршава одређени задатак на основу пружених улаза, а кориснику враћа тражене резултате у облику излаза. Функције се користе за уклањање понављајућег кода у великим базама кодова.
Након дефинисања функције, можете је касније поново користити, било у истом програму или у другом програму.
Синтакса функције
Функција на Ц ++ има следећу синтаксу:
ретурнТипе фунцтионНаме (параметар_лист)…
…
ретурн ретурн_валуе;
РетурнТипе, параметар_лист и ретурн наредба нису обавезни. Функција на Ц ++ може да врати највише једну вредност. Ако функција не врати ниједну вриједност, ретурнТипе треба дефинирати као воид.
Шта је преоптерећење функције?
У језику Ц ++, вишеструке дефиниције функција могу имати исто име функције, али са различитим параметрима. То се назива преоптерећење функције. Помоћу функције преоптерећења функције може се постићи полиморфизам времена компајлирања у Ц++.
Функције се могу преоптеретити на следеће начине:
- Број параметара може бити различит
- Тип података параметара може бити различит
- Редослед параметара може бити различит
Међутим, повратна вриједност се не узима у обзир код преоптерећења функције.
Следеће функције су преоптерећене:
- додавање инт (инт а, инт б)
- додатак пловка (пловак ф, глоат г)
- додавање флоат-а (флоат ф, инт и)
- додавање флоат-а (инт и, флоат ф)
- додавање инт (инт а, инт б, инт ц)
- додатак плутајућег слова (флоат ф, флоат г, флоат х)
Као што видите, уз помоћ функције преоптерећења функције у Ц ++-у може постојати више дефиниција / функционалности са истим именом функције и у истом опсегу.
Без функције преоптерећења функције, требало би да напишете засебну функцију [на пример, додавање_1 (), додавање_2 () итд.) За сваку варијацију. На пример, можда ћете морати да напишете додатак_1 () да бисте додали две целобројне вредности, додатак_2 () да бисте додали два пловка и тако даље. Међутим, као што видите горе, функција преоптерећења функције може се користити за дефинисање више варијација функције „аддитион ()“, а да се при томе задржи исто име функције.
Следеће функције се не сматрају преоптерећенима, јер једина разлика између ове две је тип повратка (тип повратка се не узима у обзир за преоптерећење функција у Ц ++):
- додавање инт (инт а, инт б)
- додавање плутајућег слова (инт а, инт б)
Примери
Сада када разумете концепт преоптерећења функција, проћи ћемо кроз неколико радних примера програма како бисмо јасније разумели овај концепт. Обухватићемо следеће примере:
- Пример 1: Једноставна функција
- Пример 2: Једноставна функција сабирања
- Пример 3: Преоптерећење функције (1)
- Пример 4: Преоптерећење функције (2)
- Пример 5: Преоптерећење функције (3)
Прва два примера објашњавају како нормалне функције функционишу у Ц ++, док последња три примера показују функцију преоптерећења функције у Ц-у++.
Пример 1: Једноставна функција
У овом примеру ћемо показати како се једноставна функција може дефинисати и позвати у Ц++. Дефинисаћемо класу која се зове „Дисплаи“ и јавну функцију која се зове „дисплаи ().”Из функције“ маин () ”позваћемо функцију“ дисплаи () ”уз помоћ објекта класе“ Дисплаи ”(д).
#инцлудекоришћење простора имена стд;
разред Дисплаи
јавно:
приказ празнине ()
цоут << "Hello World!" << endl;
;
инт маин ()
Дисплаи д;
д.приказ();
ретурн 0;
Пример 2: Једноставна функција сабирања
У овом примеру ћемо показати како да дефинишемо једноставну функцију „сабирање ()“ у језику Ц++. Дефинисаћемо класу под називом „ДемоАдд“ и јавну функцију која се зове „адд ().”Из функције“ маин () ”позваћемо функцију“ адд () ”уз помоћ објекта класе“ ДемоАдд ”(д).
У овом примеру, тренутна имплементација функције „адд ()“ прихвата само два целобројна параметра. То значи да је тренутна функција „адд ()“ у стању да дода само две целобројне вредности.
Да бисте додали три целобројне вредности уместо две, може се дефинисати функција са другим именом, као што је „адд_1 ()“. У Ц ++-у функција може бити преоптерећена, што значи да се може дефинисати друга дефиниција функције „додавање ()“ која додаје три целе бројеве и задржава исто име, тј.е., „Додатак ().”У следећем примеру ћемо погледати како преоптеретити функцију„ аддитион () ”.
#инцлудекоришћење простора имена стд;
разред ДемоАдд
јавно:
додавање инт (инт а, инт б)
инт резултат;
резултат = а + б;
повратни резултат;
;
инт маин ()
ДемоАдд д;
инт и1 = 10, и2 = 20, рес;
рес = д.сабирање (и1, и2);
цоут << "Result = " << res << endl;
ретурн 0;
Пример 3: Преоптерећење функције (1)
У претходном примеру смо дефинисали функцију „адд ()“ за додавање две целине и враћање израчунатог резултата. Сада ћемо у овом примеру преоптеретити функцију „адд ()“ да бисмо додали три целе бројеве. Дакле, моћи ћемо да позовемо функцију „додавање ()“ са два целобројна аргумента, као и три целобројна аргумента.
Без функције преоптерећења функције, морали бисмо да напишемо другу функцију са другим именом.
#инцлудекоришћење простора имена стд;
разред ДемоАдд
јавно:
// Прва дефиниција функције сабирања ()
додавање инт (инт а, инт б)
инт резултат;
резултат = а + б;
повратни резултат;
// Преоптерећена верзија функције адд ()
додавање инт (инт а, инт б, инт ц)
инт резултат;
резултат = а + б + ц;
повратни резултат;
;
инт маин ()
ДемоАдд д;
инт и1 = 10, и2 = 20, и3 = 30, рес1, рес2;
рес1 = д.сабирање (и1, и2); // додавање () са 2 параметра
рес2 = д.сабирање (и1, и2, и3); // додавање () са 3 параметра
цоут << "Result = " << res1 << endl;
цоут << "Result = " << res2 << endl;
ретурн 0;
Пример 4: Преоптерећење функције (2)
У ранијим одељцима овог чланка сазнали сте да се преоптерећење функције може извршити на основу разлика у типу параметра. Овде смо преоптеретили функцију „адд ()“ на основу типа података параметра. У првој верзији функције сабирања додаћемо две променљиве целобројног типа; а у другој верзији ћемо додати две променљиве типа флоат.
#инцлудекоришћење простора имена стд;
разред ДемоАдд
јавно:
// Прва дефиниција сабирања ()
додавање инт (инт а, инт б)
инт резултат;
резултат = а + б;
повратни резултат;
// Дефиниција преоптерећене функције
додатак пловка (флоат ф, флоат г)
резултат плутања;
резултат = ф + г;
повратни резултат;
;
инт маин ()
ДемоАдд д;
инт и1 = 10, и2 = 20, рес1;
флоат ф1 = 10.5, ф2 = 20.7, рес2;
рес1 = д.сабирање (и1, и2); // зваће се додавање (инт а, инт б)
рес2 = д.сабирање (ф1, ф2); // зваће се сабирање (флоат ф, флат г)
цоут << "Result = " << res1 << endl;
цоут << "Result = " << res2 << endl;
ретурн 0;
Пример 5: Преоптерећење функције (3)
У овом примеру, функција „адд ()“ је преоптерећена на основу разлика у низу листе параметара. Ово је још један начин за преоптерећење функције у Ц++.
#инцлудекоришћење простора имена стд;
разред ДемоАдд
јавно:
// Прва дефиниција функције додавања () функције
додавање флоат-а (инт а, флоат б)
резултат плутања;
резултат = (плутајуће) а + б;
повратни резултат;
// Преоптерећена дефиниција функције додавања () функције
додавање флоат-а (флоат а, инт б)
резултат плутања;
резултат = а + (плутајуће) б;
повратни резултат;
;
инт маин ()
ДемоАдд д;
инт и1 = 10;
флоат ф1 = 10.5, рес1, рес2;
рес1 = д.сабирање (и1, ф1); // зваће се додавање (инт а, флоат б)
рес2 = д.сабирање (ф1, и1); // зваће се додавање (флоат а, инт б)
цоут << "Result = " << res1 << endl;
цоут << "Result = " << res2 << endl;
ретурн 0;
Закључак
Ц ++ је флексибилан програмски језик опште намене који се широко користи у разним доменима. Овај програмски језик подржава полиморфизам и током компајлирања и током извођења. У овом чланку сте научили како да постигнете полиморфизам времена компајлирања у Ц ++-у помоћу функције преоптерећења функције. Ово је врло корисна функција у Ц ++-у која програмерима помаже да напишу читљив код. Такође може бити корисно за писање кода за вишекратну употребу.