Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: C++: Päivämäärä-luokka

progo [24.10.2002 13:27:15]

#

Alunperin tein tämän testatakseni mikropc.netin muistilappusta
(elikkä vähän täytettä :D)

Saatatte ihmetellä sitä, että Paivamaara-struktissa on määritelty vuodelle
muuttuja vv, mutta kun noi vanhat ctime-headerin funktiot
eivät tue vuotta 2000, mulla antoi vuodeksi 102 :(

Joka tapauksessa voit kuitenkin omatekemiin päivämääriin liittää myös vuoden.

Lisäyksiä tulossa, mutta se vie oman aikansa..

* käännetty toimivaksi ainakin MinGW32:lla *

/*

PVM-luokka (hyyvin yksinkertainen)
Copyright (c) 2002 Mikael Puhakka (proguru)

*/


#include <iostream>
using namespace std;
#include <ctime>

struct Paivamaara {   // yksinkertainen tiatorakenne
int pp, kk, vv;
};

class PVM {
  Paivamaara pvm_;
public:
  PVM();
  ~PVM() {}
  friend ostream &operator<<(ostream&, PVM&); // tuki coutille
  void getTime(Paivamaara&);
  void setTime(Paivamaara&);
  void setTime(PVM&);  // lapset, tämä on sitä ylikuormitusta :)
  void ulosta() const;
  void lyhyt() const;
};
PVM::PVM() {
  // Osin kopsattu C++&OPO-kirjasta
  time_t sek;
  tm *paiva;
  time (&sek);
  paiva = localtime(&sek);
  pvm_.pp = paiva->tm_mday;
  pvm_.kk = paiva->tm_mon+1;
}
ostream &operator<<(ostream &zed, PVM& date) {
	zed << date.pvm_.pp << '.' << date.pvm_.kk << '.';
	return zed;
}
void PVM::lyhyt() const {
	cout << pvm_.pp << '.' << pvm_.kk << '.' << endl;
}
void PVM::getTime(Paivamaara &p) {
  p.pp = pvm_.pp;
  p.kk = pvm_.kk;
}
void PVM::setTime(Paivamaara &p) {
  pvm_.pp = p.pp;
  pvm_.kk = p.kk;
}
void PVM::setTime(PVM &op) {
  op.getTime(pvm_);
}
void PVM::ulosta() const {
  cout << "Päivä: " << pvm_.pp << endl;
  cout << "Kuukausi: " << pvm_.kk << endl;
  cout << endl << "Eli: " << pvm_.pp << '.' << pvm_.kk << '.' << endl;
  cout << "     -- --\n" << endl;
}

int main() {
  Paivamaara synttari;
  PVM paiva;
  synttari.pp = 10;
  synttari.kk = 4;
  synttari.vv = 1990;
  cout << "Nykyhetki: " << paiva << flush; // elipäs lyhyt ulostaa lyhyen pvmän:D
  cout << "\n\nPidennetty versio: " << endl;
  paiva.ulosta();
  paiva.setTime(synttari);
  cout << "Joten mun synttärit olivat: " << paiva << endl;
}

progo [25.10.2002 18:13:37]

#

Niin, ei tullut mainittua (paitsi itse koodissa) sitä, että nuo koneen päivämäärän hakemiseen tarvittava koodi (tuossa PVM::PVM()-funktiossa) on siitä Päivi Hietasen C++ ja Olio-ohjelmointi-kirjasta. Kaikki kunnia sille!

NJAB [27.10.2002 00:42:25]

#

nii tää luokka sitten tukeekin pieneksi aikaa kuukausia ja päiviä..
ainakin niinkauan kun päivämäärä ja kuukausi pysyy alle 2147483647.. vois tota muistiikin tietty vähän säästellä..

progo [27.10.2002 10:52:00]

#

No enpä sitä muistia heti ensiksi ajatellut.. ehkäpä intti oli liian iso tuohon hommaan :)

thefox [19.06.2003 18:09:56]

#

Noh noh, onpahan sentään 32bittisillä nopeampaa käyttää inttiä kuin charria tms. Muutaman tavun muistinmenetykseen tuskin kenenkään projekti kaatuu.

Vastaus

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

Tietoa sivustosta