// koe.cpp // 50 p => 48 #include #include #include #include #include using namespace std; //const int MAX_KOKO = 10; //#define TYPE int template class cJonot { int lkm; int max_lkm; TYPE *alkiot; TYPE virhe; // Jos yritet„„n k„ytt„„„ laittomia alkoita! cJonot(const cJonot &) { } // ???? void operator=(const cJonot &j) {} // ??? public: cJonot(int koko=0) : virhe() { lkm = 0; max_lkm = 0; if ( koko <= 0 ) return; alkiot = new TYPE[koko]; if ( alkiot == NULL ) return; max_lkm = koko; } ~cJonot() { if ( max_lkm > 0 ) delete [] alkiot; } int lisaa(const TYPE &jono); const TYPE &anna(int i) const { // -1 p if ( i < 0 || lkm <= i ) return virhe; return alkiot[i]; } void tulosta(ostream &os) const; void lue(istream &is); }; template int cJonot::lisaa(const TYPE &jono) { if ( lkm >= max_lkm ) { TYPE *uusi = new TYPE[max_lkm+5]; if ( uusi == NULL ) return 1; for (int i=0; i 0 ) delete [] alkiot; alkiot = uusi; max_lkm = max_lkm + 5; // sizeof(uusi); => 2 } alkiot[lkm] = jono; lkm++; return 0; } template void cJonot::tulosta(ostream &os) const { for (int i=0; i void cJonot::lue(istream &is) { TYPE s; while ( getline(is,s) ) { lisaa(s); } } template ostream &operator<<(ostream &os, const cJonot &jonot) { jonot.tulosta(os); return os; } int main(void) { cJonot sjonot(10); sjonot.lisaa("Kissa"); sjonot.lisaa("Korppikotka"); sjonot.tulosta(cout); // jonot.lisaa(2.3); // jonot.lisaa(4.5); cJonot ijonot(3); ijonot.lisaa(2); ijonot.lisaa(4); ijonot.tulosta(cout); // cJonot jasenet; return 0; }