prox1 Forsker
29. marts 2020 - 14:57 Der er 6 kommentarer og
2 løsninger

Fordel ved Polymorphism

Der er muligt at bruge metoder med samme navn i samme klasse, og udelukkende lade parameterne udpege hvilken af funktionerne af samme navn som skal anvendes
Altså:
#include <iostream>
using namespace std;
class Sum {
  public:
    int add(int num1,int num2){
      return num1 + num2;
    }

    int add(int num1, int num2, int num3){
      return num1 + num2 + num3;
    }
};
int main(void) {
  //Object of class Sum
  Sum obj;
  //This will call the second add function
  cout<<obj.add(10, 20, 30)<<endl; //HER ER DER TRE PARAM

  //This will call the first add function
  cout<<obj.add(11, 22); //HER ER DER TO PARAM
  return 0;
}

.. 'fint' så....
Men
Vi kunne jo lige så godt have implenteret som:

#include <iostream>
using namespace std;
class Sum {
  public:
    int add2(int num1,int num2){ //FUNKTIONEN ANGIVER HVAD DEN KAN
      return num1 + num2;
    }
    int add3(int num1, int num2, int num3){
//FUNKTIONEN ANGIVER HVAD DEN KAN
      return num1 + num2 + num3;
    }
};


int main(void) {
  //Object of class Sum
  Sum objAdd;

  //This will call the second add function
  cout<<objAdd.add3(10, 20, 30)<<endl; //SPECIFIKT KALD

  //This will call the first add function
  cout<<objAdd.add2(11, 22); //SPECIFIKT KALD
  return 0;
}

2. program er langt mere læseværdigt
Hvorfor er polymorphism som i 1. program i det hele taget en 'ting'?
arne_v Ekspert
29. marts 2020 - 15:52 #1
1) det du beskriver er ikke polymorphism men method overload (hvis du tilgiver mig for at bruge enegelske termer)
arne_v Ekspert
29. marts 2020 - 15:55 #2
2) jeg mener at den første kode er mere læsevenlig end den anden - der er en matematisk operation add - der er ikke et uendeligt antal matematiske operationer add2, add3, add4, ... og navngivningen i den færste kode afspejler dette
arne_v Ekspert
29. marts 2020 - 15:56 #3
3) muligvis gav det mere mening hvis du i.s.f. forskelligt antal argumenter brugte forsellige typer af argumenter

int add(int a, int b)
double add(double a, double b)

(specielt med div er der en forskel her!)
arne_v Ekspert
29. marts 2020 - 15:58 #4
4) hvis man havde det her behov for add med vilkårligt antal argumenter så understøtter C++ faktisk variabelt antal argumenter s[ en enkelt metode kan understøtte 1 til uendeligt argumenter
prox1 Forsker
29. marts 2020 - 16:19 #5
Tak Arne
i relation til:
https://www.computerworld.dk/eksperten/spm/1032722?k=8351922
Min 'polymorfism' er ikke 'min', den kom herfra
https://beginnersbook.com/2017/08/cpp-oops-concepts/
Her skrives
Function overloading and Operator overloading are examples of polymorphism. Polymorphism is a feature using which an object behaves differently in different situation.
Og så gives eksemplet
Det er så dér jeg blev gnaven..
Forstår du, jeg bruger 'corona-tiden' til af børste støvet af en 20++ år gammel cpp 'stak' :p
Engang for læææænge siden havde jeg nok styr på cpp til at lave småspil i openGL så en del var på 'plads', dér (på pladsen) ligger nu ragelse og rust i et m tykt lag, men tror der stadig ligger lidt der kan 'bruges'
Men polyporfism det husker jeg som noget med overide fra metode kald, og ikke den her sære historie fra tutorial'en :)
arne_v Ekspert
29. marts 2020 - 17:48 #6
Den tutorial er ikke ret god.

Et eksempel med forskellig antal argumnenter er ikke polymorfisme.

Et eksempel med samme antal argumenter af forskellig type kan *måske* kaldes polymorphisme.

https://en.wikipedia.org/wiki/Polymorphism_(computer_science) kalder det for "adhoc polymprhism".

Men helt traditionel polymorphism er når du har et klasse hiraki og du kalder super klassens metoder og sub klasserne så har en forskellig implementering, men hvor man ikke behøver at tænke over den.
arne_v Ekspert
29. marts 2020 - 17:51 #7
Eksempel:

klassen Figure har en Move metode (pure virtual formentlig)
klasserne Square og Circle arver fra Figure og har en Move implementering

Figure *f1 = new Square();
Figure *f2 = new Circle();
f1->Move(10, 10);
f2->Move(10, 10);
prox1 Forsker
29. marts 2020 - 18:07 #8
Ja netop! Nej jeg studsede også iver hans 'polymorhism'
Tak for info!
Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links

Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester





Premium
Test: Apples nye iPhone er bygget til fart og stil: Så gode er iPhone 12 og iPhone 12 Pro
Computerworld tester: IPhone 12 og iPhone 12 Pro er bygget til fart og til at se godt ud. Varen leveres stilsikkert, men noget er overset i farten.
Computerworld
Salling Group lukker stor online-satsning efter kun et år
Millionsatsningen Fillop lukker ved årets udgang. I stedet er supermarkeds-giganten Salling Group nu på vej med en række helt nye online-satsninger, der er affødt af coronakrisen.
CIO
Podcast: Hos Viking Life-Saving Equipment er it gået fra at være backend til at være noget, som kunderne spørger aktivt efter
Podcast, The Digital Edge: Viking leverer en stadig større del af deres produkt som en tjeneste. Som en del af tjenesten tager Viking ansvar for sikkerheden ved at levere, dokumentere og vedligeholde det nødvendige sikkerhedsudstyr. Hør hvordan Henrik Balslev senior digital director hos Viking har løftet den opgave.
Job & Karriere
Regner din ferie væk? Brug tiden på at søge en af disse otte stillinger, der er ledige netop nu
Det sjasker ned over hele Danmark. Du kan bruge de våde sommerdage på at søge et af disse otte job, der er ledige lige nu.
White paper
Gratis whitepaper: Hvad er EDI, og hvordan kan det styrke min forretning?
Overvejer du EDI, og ønsker du at undersøge, om EDI er den rette investering for din virksomhed? Har en af dine kunder eller leverandører for nyligt bedt dig om at udveksle elektroniske dokumenter (EDI)? Så hent dette whitepaper og få et overblik over, hvad EDI er, og hvilke fordele producenter og grossister som dig kan se frem til, når du investerer i EDI til din forretning.