Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // taul_d.cpp -esimerkki dynaamisesta taulukosta
- #include <iostream>
- using std::cout;
- using std::ostream;
- using std::endl;
- #include <sstream>
- using std::ostringstream;
- /**
- * Luokka dynaamiselle int-taulukolle
- * @code
- * <pre name="test">
- * ostringstream ss;
- * cTaulukko luvut(10);
- * ss << luvut; ss.str() === "";
- * luvut.lisaa(0); luvut.lisaa(2); luvut.lisaa(2);
- * luvut.lisaa(4); luvut.lisaa(2);
- * ss << luvut; ss.str() === "0 2 2 4 2 "; ss.str("");
- * cTaulukko taul;
- * taul.sijoita(luvut);
- * ss << taul; ss.str() === "0 2 2 4 2 "; ss.str("");
- * taul.lisaa(99);
- * luvut.lisaa(88);
- * ss << taul; ss.str() === "0 2 2 4 2 99 "; ss.str("");
- * ss << luvut; ss.str() === "0 2 2 4 2 88 "; ss.str("");
- * int lisattava[] = {1,2,3};
- * luvut.lisaa(lisattava, 3);
- * ss << luvut; ss.str() === "0 2 2 4 2 88 1 2 3 "; ss.str("");
- * </pre>
- * @endcode
- */
- class cTaulukko {
- size_t max_koko;
- size_t lkm;
- int *alkiot;
- int vika;
- public:
- cTaulukko(size_t 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){
- max_koko = t.max_koko;
- lkm = t.lkm;
- alkiot = t.alkiot;
- vika = t.vika;
- }
- 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;
- int lisaa(std::initializer_list<int> lista) {
- for (int luku : lista) if ( lisaa(luku) ) return 1;
- return 0;
- }
- void lisaa(int luvut[], int lkm){
- int i =0;
- for(i; i<lkm; i++){
- lisaa(luvut[i]);
- }
- }
- cTaulukko &operator+(const cTaulukko &t) { lisaa(&*t.alkiot, t.lkm); return *this; }
- };
- ostream &cTaulukko::tulosta(ostream &os) const
- {
- int i;
- for (i=0; i < lkm; i++)
- os << alkiot[i] << " ";
- // os << endl;
- return os;
- }
- ostream &operator<<(ostream &os, const cTaulukko &t) { return t.tulosta(os); }
- int main()
- {
- cTaulukko luvut(7);
- luvut.lisaa(0); luvut.lisaa(2);
- cout << luvut << endl; // 0 2
- cTaulukko taul(7);
- taul.sijoita(luvut); // tai jopa taul = luvut;
- cout << taul << endl; // tulostaa saman kuin edellä
- cTaulukko b3 = luvut + taul;
- cout << b3 << endl;
- cTaulukko t0();
- cout << t0 << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement