C ++ లో ఫంక్షన్ ఓవర్‌లోడింగ్ మరియు ఓవర్‌రైడింగ్ మధ్య వ్యత్యాసం

రచయిత: Laura McKinney
సృష్టి తేదీ: 1 ఏప్రిల్ 2021
నవీకరణ తేదీ: 11 మే 2024
Anonim
Dynamic Binding (Polymorphism) Part IV (Lecture 44)
వీడియో: Dynamic Binding (Polymorphism) Part IV (Lecture 44)

విషయము


‘లోఓవర్లోడింగ్‘మేము ఓవర్‌లోడ్ చేసిన ఫంక్షన్లను ఒకే ఫంక్షన్ పేరుతో పునర్నిర్వచించాము కాని, వేర్వేరు సంఖ్య మరియు పారామితుల రకం. ‘లోభర్తీ‘ఓవర్‌రైడెన్ ఫంక్షన్ యొక్క ప్రోటోటైప్ ప్రోగ్రామ్ అంతటా ఒకే విధంగా ఉంటుంది, అయితే, ఓవర్‌రైడ్ చేయవలసిన ఫంక్షన్ బేస్ క్లాస్‌లో‘ వర్చువల్ ’అనే కీవర్డ్‌తో ముందే ఉంటుంది మరియు ఏ కీవర్డ్ లేకుండా ఉత్పన్నమైన క్లాస్ చేత పునర్నిర్వచించబడుతుంది.

OOP యొక్క కీలకమైన లక్షణాలలో పాలిమార్ఫిజం ఒకటి. దీని అర్థం ‘బహుళ రూపాలకు ఒక పేరును ఉపయోగించడం’. ‘ఫంక్షన్ ఓవర్‌లోడింగ్’, ‘ఆపరేటర్ ఓవర్‌లోడింగ్’ మరియు ‘వర్చువల్ ఫంక్షన్’ ఉపయోగించి పాలిమార్ఫిజం అమలు చేయవచ్చు. ‘ఓవర్‌లోడింగ్’ మరియు ‘ఓవర్‌రైడింగ్’ రెండూ పాలిమార్ఫిజం భావనను సూచిస్తాయి. ఇక్కడ, ‘ఓవర్‌లోడింగ్’ కంపైల్ టైమ్ పాలిమార్ఫిజం మరియు ‘ఓవర్‌రైడింగ్’ రన్ టైమ్ పాలిమార్ఫిజం. మరింత అధ్యయనం చేస్తే, ‘ఓవర్‌లోడింగ్’ మరియు ‘ఓవర్‌రైడింగ్’ లోని ప్రధాన వ్యత్యాసం గురించి మాట్లాడితే.

ఇంకా, పోలిక చార్ట్ సహాయంతో ఓవర్‌లోడింగ్ మరియు ఓవర్‌రైడింగ్ మధ్య వ్యత్యాసాన్ని మేము అధ్యయనం చేస్తాము.

  1. పోలిక చార్ట్
  2. నిర్వచనం
  3. కీ తేడాలు
  4. సారూప్యతలు
  5. ముగింపు


పోలిక చార్ట్:

పోలిక కోసం ఆధారంఓవర్లోడింగ్భర్తీ
ప్రోటోటైప్సంఖ్య లేదా పరామితి రకం భిన్నంగా ఉండటంతో ప్రోటోటైప్ భిన్నంగా ఉంటుంది.నమూనా యొక్క అన్ని అంశాలు ఒకేలా ఉండాలి.
కీవర్డ్ఓవర్‌లోడింగ్ సమయంలో కీవర్డ్ వర్తించబడలేదు.ఓవర్‌రైడ్ చేయాల్సిన ఫంక్షన్ బేస్ క్లాస్‌లో, కీవర్డ్ వర్చువల్ ద్వారా ముందు ఉంటుంది.
ప్రత్యేక కారకంపారామితి సంఖ్య లేదా రకం భిన్నంగా ఉంటుంది, ఇది ఫంక్షన్ యొక్క వెర్షన్ అని పిలువబడుతుంది.పాయింటర్ చేత ఏ తరగతుల ఫంక్షన్ పిలువబడుతుందో, ఆ పాయింటర్‌కు ఏ తరగతుల వస్తువు కేటాయించబడిందో నిర్ణయించబడుతుంది.
నమూనాను నిర్వచించడంఫంక్షన్ ఒకే పేరుతో పునర్నిర్వచించబడింది, కానీ విభిన్న సంఖ్య మరియు పరామితి రకం.ఫంక్షన్ నిర్వచించబడింది, ప్రధాన తరగతిలో ఒక కీవర్డ్ వర్చువల్ ముందు మరియు అవుట్ కీవర్డ్ తో ఉత్పన్నమైన తరగతి ద్వారా పునర్నిర్వచించబడింది.
సాధించిన సమయంసమయాన్ని కంపైల్ చేయండి.రన్ సమయం.
కన్స్ట్రక్టర్ / వర్చువల్ ఫంక్షన్కన్స్ట్రక్టర్లను ఓవర్లోడ్ చేయవచ్చు.వర్చువల్ ఫంక్షన్ భర్తీ చేయబడుతుంది.
డిస్ట్రాక్టర్
డిస్ట్రక్టర్ ఓవర్లోడ్ చేయబడదు.డిస్ట్రక్టర్ ఓవర్రైడ్ చేయవచ్చు.
బైండింగ్ఓవర్‌లోడింగ్ ప్రారంభ బైండింగ్‌ను సాధిస్తుంది.ఓవర్రైడింగ్ ఆలస్య బైండింగ్‌ను సూచిస్తుంది.


ఓవర్‌లోడింగ్ యొక్క నిర్వచనం

కంపైల్-టైమ్ పాలిమార్ఫిజమ్‌ను ‘ఓవర్‌లోడింగ్’ అంటారు. పాలిమార్ఫిజం యొక్క భావన నుండి ఓవర్‌లోడింగ్ ఉత్పత్తి అవుతున్నందున, ఇది “బహుళ పద్ధతులకు సాధారణ ఇంటర్‌ఫేస్” ను అందిస్తుంది. అంటే, ఒక ఫంక్షన్ ఓవర్‌లోడ్ అయితే, అది పునర్నిర్వచించబడినప్పుడు అదే ఫంక్షన్ పేరును కలిగి ఉంటుంది.

ఓవర్‌లోడ్ చేసిన ఫంక్షన్లు, విభిన్న ‘సంఖ్య లేదా పరామితి (లు)’ విషయంలో భిన్నంగా ఉంటాయి, ఇది ఒక ఓవర్‌లోడ్ ఫంక్షన్‌ను మరొకదానికి భిన్నంగా చేస్తుంది. ఈ విధంగా, కంపైలర్ ఏ ఓవర్లోడ్ ఫంక్షన్ అని పిలుస్తుందో గుర్తిస్తుంది. సాధారణంగా ఓవర్‌లోడ్ చేసిన విధులు ‘కన్స్ట్రక్టర్లు’. ‘కాపీ కన్స్ట్రక్టర్’ అనేది ఒక రకమైన “కన్స్ట్రక్టర్ ఓవర్‌లోడింగ్”.

సి ++ లో ఓవర్‌లోడింగ్ అమలు

తరగతి ఓవర్లోడ్ {int a, b; పబ్లిక్: int లోడ్ (int x) {// మొదటి లోడ్ () ఫంక్షన్ a = x; తిరిగి a; } int లోడ్ (int x, int y) second // రెండవ లోడ్ () ఫంక్షన్ a = x; బి = y; return a * b; }}; int main () {ఓవర్‌లోడ్ O1; O1.load (20); // మొదటి లోడ్ () ఫంక్షన్ కాల్ O1.load (20,40); // రెండవ లోడ్ () ఫంక్షన్ కాల్}

ఇక్కడ క్లాస్ ఓవర్లోడ్ యొక్క ఫంక్షన్ లోడ్ () ఓవర్లోడ్ చేయబడింది. తరగతి యొక్క రెండు ఓవర్లోడ్ ఫంక్షన్లను మొదటి లోడ్ () ఫంక్షన్ ఒకే పూర్ణాంక పరామితిని మాత్రమే అంగీకరిస్తుంది, రెండవ లోడ్ () ఫంక్షన్ రెండు పూర్ణాంక పరామితిని అంగీకరిస్తుంది. క్లాస్ ఓవర్లోడ్ యొక్క వస్తువు ఒకే పరామితితో లోడ్ () ఫంక్షన్‌ను పిలిచినప్పుడు, మొదటి లోడ్ () ఫంక్షన్ పిలువబడుతుంది. ఆబ్జెక్ట్ కాల్స్ లోడ్ () ఫంక్షన్ రెండు పారామితులను దాటినప్పుడు, రెండవ లోడ్ () ఫంక్షన్ అంటారు.


ఓవర్రైడింగ్ యొక్క నిర్వచనం

రన్-టైమ్‌లో సాధించిన పాలిమార్ఫిజమ్‌ను ‘ఓవర్‌రైడింగ్’ అంటారు. ఇది ‘వారసత్వం’ మరియు ‘వర్చువల్ ఫంక్షన్‌లు’ ఉపయోగించడం ద్వారా సాధించబడుతుంది. ఓవర్‌రైడ్ చేయవలసిన ఫంక్షన్ బేస్ క్లాస్‌లో ‘వర్చువల్’ అనే కీవర్డ్‌కు ముందే ఉంటుంది మరియు ఏ కీవర్డ్ లేకుండా ఉత్పన్నమైన క్లాస్‌లో పునర్నిర్వచించబడుతుంది.

ఓవర్రైడింగ్ విషయంలో గుర్తుంచుకోవలసిన ముఖ్యమైన విషయం ఏమిటంటే, ఓవర్రైడ్ ఫంక్షన్ యొక్క ప్రోటోటైప్ మారకూడదు, అయితే ఉత్పన్నమైన తరగతి దానిని పునర్నిర్వచించింది. ఓవర్‌రైడెన్ ఫంక్షన్‌కు కాల్ ఇచ్చినప్పుడు, ఫంక్షన్ పిలుపునిచ్చే ‘పాయింటర్ సూచించిన వస్తువు రకం’ ఆధారంగా ఫంక్షన్ యొక్క ఏ వెర్షన్ అని పిలువబడుతుందో C ++ నిర్ణయిస్తుంది.

సి ++ లో ఓవర్రైడింగ్ అమలు

క్లాస్ బేస్ {పబ్లిక్: వర్చువల్ శూన్య ఫంక్ట్ () base // బేస్ క్లాస్ కౌట్ యొక్క వర్చువల్ ఫంక్షన్ << "ఇది బేస్ క్లాస్ ఫంక్ట్ ()"; }}; తరగతి ఉత్పన్నం 1: పబ్లిక్ బేస్ {పబ్లిక్: శూన్య ఫంక్ట్ () {// బేస్ క్లాస్ యొక్క వర్చువల్ ఫంక్షన్ ఉత్పన్న 1 క్లాస్ కౌట్‌లో పునర్నిర్వచించబడింది << "ఇది ఉత్పన్న 1 తరగతుల ఫంక్షన్ ()"; }}; తరగతి ఉత్పన్నం 2: పబ్లిక్ బేస్ {పబ్లిక్: శూన్య ఫంక్ట్ () {// బేస్ క్లాస్ యొక్క వర్చువల్ ఫంక్షన్ ఉత్పన్న 2 క్లాస్ కౌట్‌లో పునర్నిర్వచించబడింది << "ఇది ఉత్పన్నమైన 2 తరగతుల ఫంక్షన్ ()"; }}; int main () {base * p, b; ఉత్పన్నం 1 డి 1; ఉత్పన్న 2 డి 2; * P = & బి; P-> funct (); // బేస్ క్లాస్ ఫంక్ట్ () కు కాల్ చేయండి. * P = & d1; P-> funct (); // ఉత్పన్న 1 తరగతి ఫంక్షన్‌కు కాల్ చేయండి (). * P = & d2; P-> funct (); // ఉత్పన్న 2 తరగతి ఫంక్షన్‌కు కాల్ చేయండి (). తిరిగి 0; }

ఇక్కడ, ఒకే బేస్ క్లాస్ ఉంది, ఇది రెండు ఉత్పన్న తరగతుల ద్వారా బహిరంగంగా వారసత్వంగా పొందబడుతుంది. వర్చువల్ ఫంక్షన్ ‘వర్చువల్’ అనే కీవర్డ్‌తో బేస్ క్లాస్‌లో నిర్వచించబడింది మరియు ఇది కీవర్డ్ లేని ఉత్పన్న తరగతులచే పునర్నిర్వచించబడుతుంది. ప్రధాన () లో, బేస్ క్లాస్ ఒక పాయింటర్ వేరియబుల్ ‘p’ మరియు ఒక వస్తువు ‘b’ ను సృష్టిస్తుంది; ‘ఉత్పన్న 1 ′ తరగతి ఒక వస్తువు d1 ను సృష్టిస్తుంది మరియు ఉత్పన్న 2 తరగతి ఒక వస్తువు d2 ను సృష్టిస్తుంది’.

ఇప్పుడు, మొదట్లో బేస్ క్లాస్ యొక్క వస్తువు ‘బి’ యొక్క చిరునామా బేస్ క్లాస్ ‘పి’ యొక్క పాయింటర్‌కు కేటాయించబడుతుంది. ‘P’ ఫంక్షన్ ఫంక్షన్ () కు కాల్ ఇస్తుంది, కాబట్టి బేస్ క్లాస్ యొక్క ఫంక్షన్ అంటారు.అప్పుడు ఉత్పన్నమైన 1 తరగతి వస్తువు యొక్క చిరునామా ‘d1’ పాయింటర్ ‘p’ కు కేటాయించబడుతుంది, మళ్ళీ అది ఫంక్షన్ () కు కాల్ ఇస్తుంది; ఇక్కడ ఉత్పన్న 1 తరగతి యొక్క ఫంక్షన్ ఫంక్షన్ () అమలు అవుతుంది. చివరగా, ఉత్పన్నమైన 2 తరగతి వస్తువుకు పాయింటర్ ‘p’ కేటాయించబడుతుంది. అప్పుడు ఉత్పన్న 2 క్లాస్ యొక్క ఫంక్షన్ ఫంక్షన్ () ను అమలు చేసే ఫంక్షన్ ఫంక్ట్ () ను ‘పి’ పిలుస్తుంది.

ఉత్పన్నమైన 1 / ఉత్పన్న 2 తరగతి ఫంక్షన్ () ను పునర్నిర్వచించకపోతే, వర్చువల్ ఫంక్షన్ ‘క్రమానుగత’ అయినందున, బేస్ క్లాస్ యొక్క ఫంక్ట్ () పిలువబడుతుంది.

  1. ఓవర్లోడ్ చేయబడిన ఫంక్షన్ యొక్క ప్రోటోటైప్ ఓవర్లోడ్ చేయబడిన ఫంక్షన్కు పంపబడిన పారామితి రకం మరియు సంఖ్య కారణంగా భిన్నంగా ఉంటుంది. మరోవైపు, ఓవర్‌రైడెన్ ఫంక్షన్ యొక్క ప్రోటోటైప్ మారదు ఎందుకంటే ఓవర్‌రైడెన్ ఫంక్షన్ అది చెందిన వివిధ తరగతికి భిన్నమైన చర్యను చేస్తుంది, కానీ ఒకే రకమైన మరియు పరామితి సంఖ్యతో.
  2. ఓవర్‌లోడ్ చేసిన ఫంక్షన్ పేరు ఏ కీవర్డ్‌తోనూ ముందు ఉండదు, అయితే ఓవర్‌రైడ్ ఫంక్షన్ పేరు కీ వర్డ్ “వర్చువల్” తో బేస్ క్లాస్‌లో మాత్రమే ఉంటుంది.
  3. ఏ ఓవర్లోడ్ ఫంక్షన్ ప్రారంభించబడుతుందో అది ఫంక్షన్కు పంపబడిన పారామితి రకం లేదా సంఖ్యపై ఆధారపడి ఉంటుంది. ఏ తరగతి యొక్క ఓవర్‌రైడెన్ ఫంక్షన్ ఆధారపడి ఉంటుంది, ఏ తరగతి యొక్క ఆబ్జెక్ట్ చిరునామా పాయింటర్‌కు కేటాయించబడుతుంది, ఇది ఫంక్షన్‌ను ప్రారంభిస్తుంది.
  4. ఏ ఓవర్‌లోడ్ ఫంక్షన్‌ను ప్రారంభించాలో కంపైల్ సమయంలో పరిష్కరించబడుతుంది. అమలు చేయాల్సిన ఓవర్‌రైడ్ ఫంక్షన్ రన్‌టైమ్‌లో పరిష్కరించబడుతుంది.
  5. కన్స్ట్రక్టర్లను ఓవర్‌లోడ్ చేయవచ్చు కాని ఓవర్‌రైడ్ చేయలేము.
  6. డిస్ట్రక్టర్లను ఓవర్‌లోడ్ చేయలేము, కాని వాటిని ఓవర్‌రైడ్ చేయవచ్చు.
  7. ఓవర్లోడింగ్ ప్రారంభ బైండింగ్ను సాధిస్తుంది, ఎందుకంటే ఓవర్లోడ్ ఫంక్షన్ ప్రారంభించబడుతుంది కంపైల్ సమయంలో పరిష్కరించబడుతుంది. ఓవర్‌రైడింగ్ ఆలస్యంగా బైండింగ్‌ను సాధిస్తుంది, ఎందుకంటే ఓవర్‌రైడ్ ఫంక్షన్ ఇన్వోక్ చేయబడుతుంది రన్‌టైమ్‌లో పరిష్కరించబడుతుంది.

సారూప్యతలు

  1. రెండూ తరగతి యొక్క సభ్యుల విధులకు వర్తించబడతాయి.
  2. ఈ రెండింటి వెనుక ఉన్న ప్రాథమిక భావన పాలిమార్ఫిజం.
  3. మేము ఫంక్షన్లకు ఓవర్లోడింగ్ మరియు ఓవర్రైడింగ్ వర్తించేటప్పుడు ఫంక్షన్ పేరు అలాగే ఉంటుంది.

ముగింపు

ఓవర్‌లోడింగ్ మరియు ఓవర్‌రైడింగ్ ఒకేలా కనిపిస్తాయి, కానీ ఇది అలా కాదు. విధులను ఓవర్‌లోడ్ చేయవచ్చు, అయితే, ఏ తరగతి అయినా భవిష్యత్తులో ఓవర్‌లోడ్ చేసిన ఫంక్షన్‌ను మరింత పునర్నిర్వచించదు. వర్చువల్ ఫంక్షన్ ఓవర్లోడ్ చేయబడదు; అవి మాత్రమే భర్తీ చేయబడతాయి.