Advertisement
Guest User

Untitled

a guest
Jun 26th, 2017
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.66 KB | None | 0 0
  1. #include<iostream>
  2.  
  3.  
  4.  
  5. using namespace std;
  6.  
  7.  
  8.  
  9. class array {
  10.  
  11.     private:
  12.  
  13.         double *d;
  14.  
  15.         int len;
  16.  
  17.  
  18.  
  19.     public:
  20.  
  21.     // Konstruktor inicjalizujący dwie zmienne klasy
  22.  
  23.     // zerem (d(0)) i rozmiarem size z wartości domyślną
  24.  
  25.     // 0, czyli można jej nie podawać (void).
  26.  
  27.     array(int size=0) : d(0),len(size) {
  28.  
  29.         if(size>0) {
  30.  
  31.             // Wskaźnik na tablicę o rozmiarze size
  32.  
  33.             d = new double [size];
  34.  
  35.             // zerowanie elementów tablicy
  36.  
  37.             for(int i=0;i<len;i++) d[i]=0;
  38.  
  39.         }
  40.  
  41.         // Wyświetlanie napisy 'array'.
  42.  
  43.         cout <<"array\n";
  44.  
  45.     }
  46.  
  47.  
  48.  
  49.     // Konstruktor z argumentem jako referencją do obiektu
  50.  
  51.     // klasy array (array inicjalizowany array-em)
  52.  
  53.     // Wskaźnik na double'a znów zerowany.
  54.  
  55.     array(const array& a) : d(0) {
  56.  
  57.         if(a.len>0) {
  58.  
  59.             // Jak array, którym inicjalizujemy (z argumentu)
  60.  
  61.             // ma niezerową długość, to klonujemy.
  62.  
  63.             len=a.len;
  64.  
  65.             d=new double[a.len];
  66.  
  67.             for(int i=0;i<len;i++) d[i]=a.d[i];    //look's good
  68.  
  69.         }
  70.  
  71.     }
  72.  
  73.  
  74.  
  75.     // Konstruktor kopiujący?
  76.  
  77.     // Zwraca referencją, czyli można pisać
  78.  
  79.     // arr1 = arr2 = arr3.
  80.  
  81.     // załóżmy, że w kodzie jest arr1 = arr2
  82.  
  83.     array& operator=(const array& a) {
  84.  
  85.         cout <<"=";
  86.  
  87.         if(a.len>0) { // jeżli arr2 niezerowe, to
  88.  
  89.             if(len>0) delete [] d; // ???? Kasowanie d z arr1, a potem
  90.  
  91.             // Klonowanie
  92.        
  93. //DAREK: a co z dlugoscia? musisz ja najpierw skopiowac :)
  94.             d= new double [len=a.len];
  95.  
  96.             for(int i=0; i<len; i++) d[i]=a.d[i];
  97.  
  98.         }
  99.  
  100.         // Zwrot adresu tablicy, czyli referencji do niej
  101.  
  102.         return  *this;
  103.  
  104.     }
  105.  
  106.  
  107.  
  108.     // Dekonstruktor
  109.  
  110.     ~array() {
  111.  
  112.         // jesli dlugosc jest wieksza ode zera (gwoli ścisłości, niezerowy to <>0) ;P
  113.  
  114.         if(len>0) delete [] d;
  115.  
  116.         // Wyświetlenie "~array"  
  117.  
  118.         cout <<"\n~array";
  119.  
  120.     }
  121.  
  122.    
  123.  
  124.     // Przeciążanie operatora indeksowania
  125.  
  126.     double& operator[](int i) {
  127.  
  128.         // Wyświetlenie i-tego elementu tablicy, na którą wskazuje d
  129.  
  130.         // w nawiasach kwadratowych
  131.  
  132.         cout<<"["<<i<<"]";
  133.  
  134.         // i zwrot tego elementu
  135.  
  136.         return d[i];
  137.  
  138.     }
  139.  
  140.  
  141.  
  142.     // Przeciązamy operator <<
  143.  
  144.     // do strumienia po _prawej_ stronie << wysyłamy wszystkie
  145.  
  146.     // elementy tablicy, na którą wskazuje d.
  147.  
  148.     // Czyli możemy napisać "arr1 << cout" :-)
  149.  
  150.     ostream& operator<<(ostream & out) {
  151.  
  152.         for(int i=0; i<len;i++) out<<d[i]<<" ";
  153.  
  154.         // Zwracamy referencję, czyli możemy napisać
  155.  
  156.         // arr2 << arr << cout;
  157.  
  158.         return out;
  159.  
  160.     }
  161.  
  162.  
  163.  
  164.     // Casting vel rzutowanie.
  165.  
  166.     // Zwracamy długość, czyli int(arr1) === arr1.len
  167.  
  168.     operator int() {return len;}
  169.  
  170. };
  171.  
  172.  
  173.  
  174. array g;
  175.  
  176. int main() {
  177.  
  178.     try {
  179.  
  180.         cout<<"main:\n";    // main\n
  181.  
  182.         array a(2);         // array\n (a ma długość 2)
  183.  
  184.         array b=a;          // nic (zostanie wywolany kontruktor array(const array& a)
  185.  
  186.         double c=a;         // nic (c jest 2 /długość a/ - TAK MI SIĘ WYDAJE)
  187.  
  188.         b[0]=3;             // [0]
  189.  
  190.         a[1]=4;             // [1]
  191.  
  192.         b<<(cout<<c);       // 23 0 (najpierw c, bez spacji b[0], spacja i b[1]
  193.  
  194.         cout<<"\n";         // nowy wiersz
  195.  
  196.         cout<<b[0]<<" "<<b[1]; // [1][0]3 0
  197.  
  198.         cout<<"\nend";      // nowy wiersz i end
  199.  
  200.     } catch(exception e) {
  201.  
  202.         system("pause");
  203.  
  204.     }
  205.  
  206.     return 0;               // ~array
  207.                             // ~array
  208.                             // ~array
  209.  
  210. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement