Gå til innhold

ProgrammeringsBaren! Småprat, om det du elsker!


Anbefalte innlegg

  • 3 måneder senere...
Videoannonse
Annonse

Ok, jeg mistenker da at det ikke er noen skikkelig grunn. Elendig navngivning.

Egentlig ikke. Den er virtuell i den forstand at den strengt tatt ikke behøver være definert direkte mot interfacet du sender melding til. Det er slik virtuell brukes i computer science - deal with it. Det er plenty av andre tilfeller hvor virtuell brukes analogt til dette.

 

Edit: Finnes det noe reelt behov (utover effektivitet og bakoverkompatibilitet) for å bruke metoder som ikke er virtual?

Ja. Om metoden ikke er virtual trengs ikke et vtable eller lignende (dynamiske) løsninger, og man kan drive statisk dispatch (uten devirtualisation). Mindre indirection = færre cache misses.
Lenke til kommentar

Det var det jeg kalte effektivitet.

Som i største grad er relevant.

 

Dessverre glemte jeg et annet viktig aspekt, og det er hvor godt interfacet ditt kommuniserer, både med andre utviklere og brukere. virtual, og likeså mangelen på, er interessant og tidvis viktig informasjon.

 

 

Det er plenty av andre tilfeller hvor virtuell brukes analogt til dette.

Hvor?

 

virtual table, virtuelle noder i en graf, hvis representasjon ikke er eksplisitt, for eksempel.
Lenke til kommentar

dessverre så fik jeg ikke så mye ut av det som jeg ønsker

 

og det lille jeg har funnet ut selv så virker den tungvind å bruke hvis poenget  er å ha en liste med referanse og verdier for hver referanse

det du linket til gå i praksis ikke noe mere informasjon

 

men takk for hjelpen likevel

 

Kanskje disse linkene er mer nyttige?

 

http://delphi.wikia.com/wiki/TValueListEditor_Class

http://stackoverflow.com/questions/18856438/run-time-manipulation-of-valuelisteditor-rows-and-values-in-delphi

Lenke til kommentar

Hva er gode engelskspråklige diskusjonsfora for program- og databasedesign? Nå tenker jeg ikke på fora av typen StackOverflow (spørsmål/svar), men der man kan gå mer i dialog rundt emner. SO passer veldig godt for godt definerte spørsmål, men er lite egnet for "hva tenker dere om ..."-type spørsmål.

Lenke til kommentar

Noen som vet hva slags programeringsspråk som kan være aktuelt å kunne innen finans/aksje?

 

Tja, kommer veldig an på hvilket område innen finans og aksjer du tenker på... for mange er det Excel som gjelder, mens eksotiske funksjonelle språk som Haskell, Clojure/Lisp etc har nådd en viss popularitet innen HFT (high frequency trading), dvs aksjeroboter osv.

Lenke til kommentar
  • 2 uker senere...

Jeg har et problem med debugging av en C++-kode. Problemet oppstår pga pekere til en base-klasse, som egentlig peker til en sub-klasse:

 

class AllAboutThatBase {
public:
    virtual ~AllAboutThatBase() {}
};
 
class ChildClass : AllAboutThatBase() {
    int member;
}
...
{
    ...
    AllAboutThatBase *foo = FunksjonSomReturnererPekerTilChildClass();
    breakpoint.
}

 

I Nemiver (frontend til gdb) får jeg ikke opp noen av verdiene (int member) i foo. Er dette mulig å få til på noen måte?

Lenke til kommentar

Nå er det riktig nok en god stund siden jeg har jobbet med både arv og C++, og ikke minst arv i C++, så mulig jeg er helt ute nå, men `foo` er en peker til AllAboutThatBase, så du kan bare bruke ting som den klassen har. Se feks for deg at du skriver `foo->member`, og at det går greit. Hva skjer når jeg lager følgende klasse, og skriver dette:

 

 

class TopKek : AllAboutThatBase {
public:
    int member123;
}

{
    ...
    AllAboutThatBase *foo = FunksjonSomReturnererPekerTilTopKek();
    std::cout << foo->member;
}
TopKek har jo åpenbart ikke `member`, da AllAboutThatBase heller ikke har member.

 

Du kan vel alltids caste ned siden du vet at retuttypen til funksjonen din er ChildClass, eller du kan endre foo til å være en peker til ChildClass i stedet.

Endret av Martin HaTh
Lenke til kommentar

Jeg har et problem med debugging av en C++-kode. Problemet oppstår pga pekere til en base-klasse, som egentlig peker til en sub-klasse:

 

 

I Nemiver (frontend til gdb) får jeg ikke opp noen av verdiene (int member) i foo. Er dette mulig å få til på noen måte?

Ja, men det er ikke noe du vil gjøre.

 

For det første er løsningen din dårlig designet om du må det (se svaret til Martin. Du peker til en Base, og det er alt du har lov til å vise. Hva om barnet ikke er ChildClass, men child_2 eller troubled_child i stedet?). For det andre er det undefined behaviour.

 

That being said har du sjelden til å bruke arv som løsning på design* i C++. Det er bedre måter å gjøre ting på.

 

*dette forutsetter at du ikke er meg og driver med svineri.

Endret av Lycantrophe
Lenke til kommentar

Det er ikke "min" løsning, så ikke skyld på meg. :p

 

Og for øvrig synes jeg svarene deres er dårlige. Fordi dere prater om språket C++. Jeg er klar over hvordan det fungerer. Greia er at når jeg debugger så forventer jeg å kunne se "mer". Det er "litt" av poenget med en debugger at man kan gjøre mer enn man kan gjøre i selve språket, eller så hadde man ikke trengt en debugger. Da kunne man bare spredt printf() litt rundt omkring.

 

 

 

Hva om barnet ikke er ChildClass, men child_2 eller troubled_child i stedet
Men når jeg debugger programmet steg for sted så vet jeg at det ikke er sånn.

 

 

 

Du kan vel alltids caste ned
Det er nettopp det jeg ikke kan. Om jeg legger inn en std::cout med cast i programmet så funker det, men det funker ikke i debuggeren.

 

Det samme kan det være.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...