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
IBM fortsætter offensiv opkøbsstrategi: Køber en af de største og ældste multicloud-leverandører i USA
IBM opkøber cloud-virksomheden MSP Taos. Det er blot det seneste opkøb fra IBM i jagten på de store cloud-giganter og falder i tråd med IBM's offensive hybrid cloud-strategi.
Computerworld
Verdens tredjestørste smartphone-producent blacklistes af Trump-administrationen
Smartphoneproducenten Xiaomi er blandt de ni nytilkomne på Trump-administrationens sorte liste over kinesiske virksomheder, som amerikanerne ikke længere må investere i.
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
Microsoft i kæmpe dansk satsning - åbner tre store datacentre i Danmark
Microsoft lancerer kæmpe satsning fra hovedkvarteret i Lyngby. Selskabet åbner tre store bæredygtige datacentre på Sjælland.
White paper
Overser du muligheder for at optimere din Dynamics-investering?
Der er omfattende og ofte oversete muligheder for at understøtte centrale forretningsprocesser med Dynamics 365 Finance & Operations. For eksempel i form af fuld EDI-integration, som optimerer logistik og forsyning. Eller ved at automatisere håndteringen af konsignation eller centrale processer vedrørende elektronisk dokumentflow og dropshipping. Læs mere i dette whitepaper, der også går i dybden med fire konkrete cases.