Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2018
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.08 KB | None | 0 0
  1. // taul_d.cpp -esimerkki dynaamisesta taulukosta
  2. #include <iostream>
  3. using std::cout;
  4. using std::ostream;
  5. using std::endl;
  6. #include <sstream>
  7. using std::ostringstream;
  8. /**
  9. * Luokka dynaamiselle int-taulukolle
  10. * @code
  11. * <pre name="test">
  12. * ostringstream ss;
  13. * cTaulukko luvut(10);
  14. * ss << luvut; ss.str() === "";
  15. * luvut.lisaa(0); luvut.lisaa(2); luvut.lisaa(2);
  16. * luvut.lisaa(4); luvut.lisaa(2);
  17. * ss << luvut; ss.str() === "0 2 2 4 2 "; ss.str("");
  18. * cTaulukko taul;
  19. * taul.sijoita(luvut);
  20. * ss << taul; ss.str() === "0 2 2 4 2 "; ss.str("");
  21. * taul.lisaa(99);
  22. * luvut.lisaa(88);
  23. * ss << taul; ss.str() === "0 2 2 4 2 99 "; ss.str("");
  24. * ss << luvut; ss.str() === "0 2 2 4 2 88 "; ss.str("");
  25. * int lisattava[] = {1,2,3};
  26. * luvut.lisaa(lisattava, 3);
  27. * ss << luvut; ss.str() === "0 2 2 4 2 88 1 2 3 "; ss.str("");
  28. * </pre>
  29. * @endcode
  30. */
  31. class cTaulukko {
  32. size_t max_koko;
  33. size_t lkm;
  34. int *alkiot;
  35. int vika;
  36. public:
  37. cTaulukko(size_t akoko=0) {
  38. vika = 0;
  39. max_koko = 0;
  40. alkiot = new int[akoko]; // new delete // new [] - delete []
  41. if ( alkiot ) max_koko = akoko;
  42. lkm = 0;
  43. }
  44.  
  45. ~cTaulukko() {
  46. if ( max_koko != 0 ){
  47. delete [] alkiot; max_koko = 0;
  48. }
  49. }
  50.  
  51. // Pitää olla jokaisessa luokassa jossa on "dynaamista tavaraa"
  52. void sijoita(const cTaulukko &t){
  53. max_koko = t.max_koko;
  54. lkm = t.lkm;
  55. alkiot = t.alkiot;
  56. vika = t.vika;
  57. }
  58. cTaulukko &operator=(const cTaulukko &t) { sijoita(t); return *this; }
  59. cTaulukko(const cTaulukko &t) { sijoita(t); } // Copy Constructor
  60.  
  61. int operator[](int i) const {
  62. if ( 0 <= i && i < lkm ) return alkiot[i];
  63. return 0;
  64. }
  65. int &operator[](int i) {
  66. if ( 0 <= i && i < lkm ) return alkiot[i];
  67. return vika;
  68. }
  69.  
  70.  
  71.  
  72.  
  73. int lisaa(int luku) {
  74. if ( lkm >= max_koko ) return 1;
  75. alkiot[lkm] = luku;
  76. lkm++;
  77. return 0;
  78. }
  79. ostream &tulosta(ostream &os=cout) const;
  80.  
  81. int lisaa(std::initializer_list<int> lista) {
  82. for (int luku : lista) if ( lisaa(luku) ) return 1;
  83. return 0;
  84. }
  85.  
  86. void lisaa(int luvut[], int lkm){
  87. int i =0;
  88. for(i; i<lkm; i++){
  89. lisaa(luvut[i]);
  90. }
  91. }
  92. cTaulukko &operator+(const cTaulukko &t) { lisaa(&*t.alkiot, t.lkm); return *this; }
  93. };
  94.  
  95.  
  96.  
  97. ostream &cTaulukko::tulosta(ostream &os) const
  98. {
  99. int i;
  100. for (i=0; i < lkm; i++)
  101. os << alkiot[i] << " ";
  102. // os << endl;
  103. return os;
  104. }
  105.  
  106. ostream &operator<<(ostream &os, const cTaulukko &t) { return t.tulosta(os); }
  107.  
  108. int main()
  109. {
  110. cTaulukko luvut(7);
  111. luvut.lisaa(0); luvut.lisaa(2);
  112. cout << luvut << endl; // 0 2
  113. cTaulukko taul(7);
  114. taul.sijoita(luvut); // tai jopa taul = luvut;
  115. cout << taul << endl; // tulostaa saman kuin edellä
  116.  
  117. cTaulukko b3 = luvut + taul;
  118.  
  119. cout << b3 << endl;
  120.  
  121. cTaulukko t0();
  122. cout << t0 << endl;
  123.  
  124. return 0;
  125. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement