Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Kääreluokkien käyttö

Le-Co-Las [06.11.2009 11:17:31]

#

Mistä löytäisin tietoa wrappereiden käytöstä c++ kielessä kun en ole törmännyt javassa kyllä?

Metabolix [06.11.2009 13:57:07]

#

Mitähän ihmettä tarkoitat? Itse en ainakaan tiedä, että siihen mitään erityistä tietoa tarvittaisiin. Onko jokin erityinen kirjasto, jolle tarvitsisit jonkinlaisen C++-wrapperin? Mikä estää käyttämästä kirjastoa ilman wrapperia, ts. mitä wrapperin pitäisi tehdä?

maka78 [07.11.2009 15:05:00]

#

Puhdas veikkaukseni on että kysyjä tarkoittaa, että onko C++:assa javassa käytettyjen perustietotyyppien kääreluokkien vastineita.
int -> Integer
long -> Long
jne.

Oma käsitykseni on, että ei ole C++ standardi kirjastossa.
Mutta oikaiskaa ihmeessä jos olen väärässä.

vehkis91 [07.11.2009 15:42:36]

#

#define Integer int;
//etc??

Metabolix [07.11.2009 16:19:26]

#

vehkis91, mietipä vähän. Ei tuo siitä mitään luokkaa tee. Sitä paitsi puolipisteen ansiosta määrittelemäsi Integer on käyttökelvoton:

Integer x;
int; x; // Syntaksivirhe.

Jos nyt noista on kyse, niin helppohan niitä on tehdä.

class Integer {
  int x;
public:
  Integer(int _x = 0): x(_x) {}
  operator int () const {
    return x;
  }

  Integer operator + (Integer const& t) const {
    return Integer(x + t.x);
  }
  Integer operator * (Integer const& t) const {
    return Integer(x * t.x);
  }
};

Hieman lisähaastetta hommaan saa, kun tekee malleilla niihin SI-järjestelmän yksikkötarkistuksen. ;)

Markus [08.11.2009 11:15:55]

#

Toisin kuin Javassa C++:ssa int, float, char jne. ovat luokkia!
Voit siis luoda luokasta int olion kuten mistä tahansa muustakin luokasta, etkä näin ollen tarvitse Java-tyylistä Integer-luokkaa.

int *olio = new int();

Vastaava lause ei siis toimi Javassa ja tämän takia siinä tarvitaan Integer-luokkaa.

Metabolix [08.11.2009 12:35:16]

#

Perustietotyypit eivät ole luokkia. Luokka on tyyppi, joka on määritelty sanalla struct, class tai union.

Javan ja C++:n ero on siinä, että Javassa kaikki ei-perustietotyyppiä olevat muuttujat ovat automaattisesti osoittimia (Javan termistöllä viittauksia), joten luokat ja perustietotyypit toimivat eri tavalla. C++ sisältää erilliset osoittimet, joten luokkia ja perustietotyyppejä voi käyttää samalla tavalla. Luokan ilmentymä on aivan samanlainen olio riippumatta siitä, onko se luotu new-operaattorilla vai automaattisesti; ero on elinajassa. Java ei vain anna tätä valintaa ohjelmoijan tehtäväksi.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta