// taul_d.cpp -esimerkki dynaamisesta taulukosta #include #include using namespace std; class cTaulukko { int max_koko; int lkm; int *alkiot; int vika; public: cTaulukko(int akoko=0) { vika = 0; max_koko = 0; alkiot = new int[akoko]; // new delete // new [] - delete [] if ( alkiot ) max_koko = akoko; lkm = 0; } ~cTaulukko() { if ( max_koko != 0 ) delete [] alkiot; max_koko = 0; } // Pit„„ olla jokaisessa luokassa jossa on "dynaamista tavaraa" void sijoita(const cTaulukko &t) { ; } cTaulukko &operator=(const cTaulukko &t) { sijoita(t); return *this; } cTaulukko(const cTaulukko &t) { sijoita(t); } // Copy Constructor int operator[](int i) const { if ( 0 <= i && i < lkm ) return alkiot[i]; return 0; } int &operator[](int i) { if ( 0 <= i && i < lkm ) return alkiot[i]; return vika; } int lisaa(int luku) { if ( lkm >= max_koko ) return 1; alkiot[lkm] = luku; lkm++; return 0; } ostream &tulosta(ostream &os=cout) const; }; ostream &cTaulukko::tulosta(ostream &os) const { int i; for (i=0; i < lkm; i++) os << setw(5) << alkiot[i]; os << endl; return os; } ostream &operator<<(ostream &os, const cTaulukko &t) { return t.tulosta(os); } int main(void) { cTaulukko luvut(7); luvut.lisaa(0); luvut.lisaa(2); luvut.tulosta(); luvut.lisaa(3); luvut.tulosta(); /* cTaulukko t2(3); t2 = luvut; // sijoita t2.tulosta(); */ luvut.tulosta(); luvut[100] = 7; luvut[101] = 72; cout << luvut[100] << " " << luvut[101] << endl; // 7 72 ? cout << luvut << endl; // luvut[3222] voidaan tehd„ cTaulukko t0; // Muistivuota uusissa C++:issa. Miksi? cout << t0 << endl; return 0; }