Преоптерећење функције у Ц ++-у: Све што треба да знате



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

Ц ++ је један од оних програмских језика који је врло флексибилан и такође покрива неколико карактеристика објектно оријентисаног програмирања. Преоптерећење је још једна карактеристика овог програмског језика.Следећи упутници биће обрађени у овом чланку „Преоптерећење функције у Ц ++“ -

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

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





  • методе,
  • конструктори, и
  • индексирана својства

Врсте преоптерећења у Ц ++

types-of-overloading-in-c++

како поставити јава путању у Виндовсима

Шта је преоптерећење функције у Ц ++-у?

Преоптерећење функције у језику Ц ++ може се дефинисати као процес постојања две или више функција члана класе са истим именом, али различитим параметрима. У преоптерећењу функције, функција се може редефинисати или коришћењем различитих врста аргумената или различитог броја аргумената у складу са захтевом. Само преко ових разлика компајлер може да разликује две преоптерећене функције.



Једна од главних предности преоптерећења функције је у томе што повећава читљивост програма, јер не морамо поново и изнова да користимо различита имена за исту акцију.

Променом броја аргумената

На овај начин преоптерећења функције дефинишемо две функције са истим именима, али различитим бројем параметара истог типа. На пример, у доле поменутом програму направили смо две функције адд () за враћање збира две и три целобројне вредности.

// прва дефиниција функције инт адд (инт а, инт б) {цоут<< a+b } // second overloaded function definition int add(int a, int b, int c) { cout << a+b+c }

Овде се каже да је функција адд () преоптерећена, јер има две дефиниције, једну која прихвата два аргумента и другу која прихвата три аргумента. Која ће функција адд () бити позвана, зависи од броја аргумената.



инт маин () {адд (10, 20) // адд () са 2 параметра позваће се адд (10, 20, 30) // позваће се сум () са 3 параметра}
#инцлуде усинг намеспаце стд инт адд (инт а, инт б) {цоут<< a+b <

У горњем примеру, функцију адд () преоптерећујемо променом броја аргумената. Прво дефинишемо функцију адд () са два параметра, затим је преоптерећујемо дефинисањем функције адд (), али овог пута са три параметра.

Имајући различите врсте аргумената

Овом методом дефинишемо две или више функција са истим именом и истим бројем параметара, али тип података који се користи за ове параметре је различит. На пример, у овом програму имамо три функције адд (), прва добија два целобројна аргумента, друга два флоат аргумента, а трећа два двострука аргумента.

#инцлуде усинг спаце намес стд инт адд (инт к, инт и) // прва дефиниција {цоут<< x+y << endl return 0 } float add(float a, float b) { cout << a+b << endl return 0 } double add(double x, double y) { cout << x+y << endl return 0 } int main() { add(20, 40) add(23.45f, 34.5f) add(40.24, 20.433) }

У горњем примеру, функцију адд () дефинишемо три пута. Прво користећи целе бројеве као параметре, друго користећи флоат као параметре и треће користећи доубле као параметар.
Тако два пута надјачавамо функцију адд ().

Предности преоптерећења функције у Ц ++

  • Преоптерећење функција користимо да бисмо уштедели простор у меморији, доследност и читљивост нашег програма.

  • Концептом преоптерећења функције усе можемо развити више функција са истим именом

  • Преоптерећење функције показује понашање полиморфизма које нам омогућава различито понашање, иако ће постојати нека веза која користи исто име функције.

  • Преоптерећење функције убрзава извршавање програма.

    __у томе__
  • Преоптерећење функције користи се за поновну употребу кода и такође за уштеду меморије.

  • Помаже апликацији да учита методу класе на основу врсте параметра.

  • Одржавање кода је једноставно.

Недостаци функције Преоптерећење у Ц ++

  • Декларације функција које се разликују само по свом повратном типу не могу се преоптеретити поступком преоптерећења функције.
  • Декларације функције члана са истим параметрима или истим типовима имена не могу се преоптеретити ако је било која од њих декларисана као статичка функција члана.
  • класа КСИЗ {статичка воид фунц () воид фунц () // грешка}

Преоптерећење функције и двосмисленост

Када компајлер не може да одлучи коју функцију треба да позове прво међу преоптерећеним функцијама, ова ситуација је позната као двосмисленост преоптерећења функције. Преводник не покреће програм ако показује грешку двосмислености. Узроци двосмислености преоптерећења функције:

  • Конверзија типа.
  • Функција са подразумеваним аргументима.
  • Функција са прослеђивањем референце

Конверзија типа:

#инцлуде усинг спаце намес стд воид фунцтион (флоат) воид фунцтион (инт) воид фунцтион (флоат к) {стд :: цоут<< 'Value of x is : ' <

Горњи пример баца грешку - „позив преоптерећене’ функције (двоструко) ’је двосмислен“. Функција (3.4) позват ће прву функцију. Функција (34) позива другу функцију према нашем предвиђању. Али то се не дешава јер се у Ц ++-у све константе са помичном зарезом третирају као двоструке, а не као флоат. Ако променљиву флоат заменимо двоструком променљивом, програм ће радити у реду. Стога ово називамо грешком конверзије типа са флоат у доубле.

како саставити Јава кодове

Функција са подразумеваним аргументима:

#инцлуде усинг спаце намес стд воид фунцтион (инт) воид фунцтион (инт, инт) воид фунцтион (инт к) {стд :: цоут<< 'Value of x is : ' <

Горњи пример даје грешку која каже да је „позив преоптерећене„ забаве (инт) “двосмислен“, јер се функција (инт и, инт з = 12) може позвати на два начина:

  1. Позивањем функције са једним аргументом (и она ће аутоматски попримити вредност з = 12)
  2. Позивом функције са два аргумента.

Када позовемо функцију: фунцтион (12), у потпуности испуњавамо услов функције (инт) и функције (инт, инт), тако да компајлер улази у нејасноће и показује грешку.

Функција са прослеђивањем референце

#инцлуде усинг спаце намес стд воид фунцтион (инт) воид фунцтион (инт &) воид фунцтион (инт а) {стд :: цоут<< 'Value of a is : ' < 

Горњи програм даје грешку рекавши да је „позив преоптерећене„ забаве (инт &) “двосмислен“. Као што видимо, прва функција узима један целобројни аргумент, а друга функција узима референтни параметар као аргумент. У овом случају, компајлер није у стању да разуме коју функцију је корисник потребан, јер не постоји синтаксичка разлика између забаве (инт) и забаве (инт &), тако да отклања грешку нејасноће.

Овим смо дошли до краја овог преоптерећења функције у Ц ++. Ако желите да сазнате више, погледајте Едурека, поуздана компанија за учење на мрежи. Едурекин курс за обуку и сертификацију Јава Ј2ЕЕ и СОА осмишљен је тако да вас оспособи за основне и напредне Јава концепте заједно са разним Јава оквирима попут Хибернате & Спринг.

Имате питање за нас? Молимо вас да га спомињете у одељку за коментаре овог блога и јавићемо вам се што је пре могуће.