Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  Valutu cout voog märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
asjameez
Kreisi kasutaja
asjameez

liitunud: 10.12.2006




sõnum 10.09.2010 18:24:48 Valutu cout voog vasta tsitaadiga

Mul on klass aeg, mis koosneb intidest tund, minut ja sekund. Proovin kirjutada operaatorit, et saaks aja valutult cout voogu lasta. Mingil kummalisel kombel pritsitakse väljundisse hoopis mäluaadress (näiteks 0x1494050).

.h
Spoiler Spoiler Spoiler


operaator
Spoiler Spoiler Spoiler


cout
Spoiler Spoiler Spoiler


Pikka aega jamasin kahe parameetriga operaatoris. Lõpuks läksin ühele parameetrile üle nagu praegu ja programm kompileerub, kuid nagu alguses ütlesin, siis väljund ei ole päris see mis ta olema peaks.

Keegi mõistab vea olemust?
Kommentaarid: 63 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 61
tagasi üles
vaata kasutaja infot saada privaatsõnum
murka_
HV vaatleja

liitunud: 05.08.2008




sõnum 10.09.2010 19:23:37 vasta tsitaadiga

ostream-ist lugemiseks on vaja teha nt:

std::ostram output
cout<<output.rdbuf()


Ja kuna aeg a on viit, siis ta peabki tagastama aadressi, kui otse printida.
Kommentaarid: 4 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 4
tagasi üles
vaata kasutaja infot saada privaatsõnum
DoS
HV veteran
DoS

liitunud: 19.08.2002




sõnum 10.09.2010 19:46:23 vasta tsitaadiga

c++:
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. class Aeg {
  5.    private:
  6.    int Tund, Minut, Sekund;
  7.    public:
  8.    Aeg();
  9.    Aeg(int, int, int);
  10.    int KysiTunnid();
  11.    int KysiMinutid();
  12.    int KysiSekundid();
  13.    Aeg operator + (Aeg);
  14.    Aeg operator - (Aeg);
  15.    friend ostream& operator << (ostream&, Aeg*);
  16.    Aeg Arvuta(Aeg);
  17.    void Tryki();
  18. };
  19.  
  20. ostream &operator<<(ostream &stream, Aeg* aeg)
  21. {
  22.    Output << aeg->KysiTunnid() << ":" << aeg->KysiMinutid() << ":" << aeg->KysiSekundid() << " ";
  23.    return Output;
  24. }


võiks töötada.
Kommentaarid: 50 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 47
tagasi üles
vaata kasutaja infot saada privaatsõnum
asjameez
Kreisi kasutaja
asjameez

liitunud: 10.12.2006




sõnum 10.09.2010 19:53:43 vasta tsitaadiga

DoS, suured tänud thumbs_up.gif

Ehk oskad paari lausega selgitada, miks operator<< ei või olla klassi Aeg member?
Kommentaarid: 63 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 61
tagasi üles
vaata kasutaja infot saada privaatsõnum
DoS
HV veteran
DoS

liitunud: 19.08.2002




sõnum 10.09.2010 20:06:51 vasta tsitaadiga

Hetkel ei oska, kuna hakkasin alles täna c++'i lähemalt uurima. Operator overloading ei ole ilmselt kõige parem koht ka, kust alustada icon_smile.gif
Kommentaarid: 50 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 47
tagasi üles
vaata kasutaja infot saada privaatsõnum
murka_
HV vaatleja

liitunud: 05.08.2008




sõnum 10.09.2010 20:23:16 vasta tsitaadiga

See operaator võib olla member funktsioon, aga ei ole tavakohane. Operaatorid, mis ei muuda andmeid võiksid olla friend funktsioonid.
Natuke teemakohast lugemist: link
Kommentaarid: 4 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 4
tagasi üles
vaata kasutaja infot saada privaatsõnum
Ohohh
Kreisi kasutaja
Ohohh

liitunud: 13.09.2003




sõnum 10.09.2010 23:19:08 vasta tsitaadiga

murka_ kirjutas:
Natuke teemakohast lugemist: link

Mulle tundub ebaotstarbekas mingite häguste ideaalide nimel kohitseda ära IDE poolt pakutav code-completion.
Kommentaarid: 6 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 6
tagasi üles
vaata kasutaja infot saada privaatsõnum
andreie
HV vaatleja
andreie

liitunud: 09.09.2006




sõnum 12.09.2010 12:09:31 vasta tsitaadiga

Need "hägused ideaalid" olid minu arust päris hästi lahti seletatud. Mis jäi segaseks?
_________________
Unix survives only because everyone else has done so badly.
Kommentaarid: 5 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 5
tagasi üles
vaata kasutaja infot saada privaatsõnum
murka_
HV vaatleja

liitunud: 05.08.2008




sõnum 12.09.2010 13:28:03 vasta tsitaadiga

Code-completion jaoks võib ju kõik seotud koodi ühte namespace-i panna.
Kommentaarid: 4 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 4
tagasi üles
vaata kasutaja infot saada privaatsõnum
Ohohh
Kreisi kasutaja
Ohohh

liitunud: 13.09.2003




sõnum 12.09.2010 18:44:33 vasta tsitaadiga

andreie kirjutas:
Need "hägused ideaalid" olid minu arust päris hästi lahti seletatud. Mis jäi segaseks?

Seletas jah, et siis klass ise on rohkem kapseldatud ja selle muutmine lõhub väiksema tõenäosusega koodi. Samas klassi välised funktsioonid on samuti ikkagi kasutamiseks mõeldud ja namespace tasandilt vaadates läheb kood täpselt sama moodi katki, kui nende funktsioonide päiseid muutma hakkad. Kokkuvõttes saad küll puhtama liidesega klassi, aga saadav kasu on üldises plaanis küsitav.


Oletame, et mul on objekt, millele tahan aega määrata.
void setTime_milliseconds(int t);
Nüüd kuna ma ei taha alati võibolla aega anda millisekundites teen sinna juurde loetavuse ja sisestamise lihtsustuse huvides nii nimetatud convenience funktsioone.
void setTime_seconds(int t);
void setTime_minutes(int t);
void setTime_hours(int t);
Nüüd kui koodis kirjutan "muutuja.setT", siis selle peale pakub IDE ise mulle juba kõik variandid välja.

Artikli soovituse järgi peaks funktsioonid sekunidite, minutite ja tundide jaoks viima klassist välja. Seega ma pean alati mäletama, mis oli põhiühik ning selle seadistamiseks kasutama otse klassi meetodit ja teiste jaoks otsima seda namespace'ist.


Ehk siis kaotan selle, et code completion muutub ebamugavamaks (mitte võimatuks, sest namespace nime kirjutamise peale viskab tõepoolest seal sees olevad funktsioonid lahti). Võidad mingi häguse tunde, et sul on nüüd puhas klass, kuid need abifunktsioonid on läbi namespace seotud ikkagi sama klassiga ja kasutad seda kompotti kui ühte klassi.


Võibolla kui kirjutada mingit üldkasutatavat librarit, siis oleks sellel mõtet. Et tõesti on üks minimaalse interfacega klass, ning selle ümber hulk abifunktsoonie, mida saab siis erinevate headerite vahel mingite loogiliste gruppidena ära jaotada.
Kommentaarid: 6 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 6
tagasi üles
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  Valutu cout voog
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.