Advertisement
wintest

ООП: Safe Array

Apr 9th, 2017
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.06 KB | None | 0 0
  1. // Safe Array header
  2. // динамичен масив и големина на масива
  3. //предеф на []
  4.  
  5. #pragma once
  6.  
  7. #include<cassert>
  8. #include<iostream>
  9.  
  10. class SafeArray{
  11. private:
  12.     int *arr;
  13.     size_t sizeOfArray;
  14.  
  15. public:
  16.     //big 5
  17.     SafeArray();
  18.     //not pasrt of big 5
  19.     SafeArray(size_t);
  20.     SafeArray(int*, size_t);
  21.     SafeArray(const SafeArray &);
  22.     SafeArray& operator = (const SafeArray &);
  23.     ~SafeArray();
  24.  
  25.  
  26.     //getter
  27.     int set_sz(size_t);
  28.     size_t get_sz() const;
  29.  
  30.     //предеф на []   => Задължително член-фунцкии
  31.     //връщаме адреса, защото при arr[1]=5; променяваме обекта, а шом променяме връщаме по референция
  32.     //не подаваме конст ,защото са 1.приимитивна променлива и 2. при битово копиране се създава копие и не правим мизерии с оригинала
  33.    
  34.     int &operator [](size_t);
  35.     int &operator [](size_t) const;
  36.  
  37.     //предеф на () - сума на елементите до този индекс
  38.  
  39.     int operator ()(size_t) const;
  40.  
  41.  
  42.  
  43. };
  44.  
  45. std::ostream& operator <<(std::ostream, const SafeArray &);
  46. // синамичен масив и големина на масива
  47. //предеф на []
  48.  
  49. #pragma once
  50.  
  51. #include<cassert>
  52. #include<iostream>
  53.  
  54. class SafeArray{
  55. private:
  56.     int *arr;
  57.     size_t sizeOfArray;
  58.  
  59. public:
  60.     //big 5
  61.     SafeArray();
  62.     //not pasrt of big 5
  63.     SafeArray(size_t);
  64.     SafeArray(int*, size_t);
  65.     SafeArray(const SafeArray &);
  66.     SafeArray& operator = (const SafeArray &);
  67.     ~SafeArray();
  68.  
  69.  
  70.     //getter
  71.     int set_sz(size_t);
  72.     size_t get_sz() const;
  73.  
  74.     //предеф на []   => Задължително член-фунцкии
  75.     //връщаме адреса, защото при arr[1]=5; променяваме обекта, а шом променяме връщаме по референция
  76.     //не подаваме конст ,защото са 1.приимитивна променлива и 2. при битово копиране се създава копие и не правим мизерии с оригинала
  77.    
  78.     int &operator [](size_t);
  79.     int &operator [](size_t) const;
  80.  
  81.     //предеф на () - сума на елементите до този индекс
  82.  
  83.     int operator ()(size_t) const;
  84.  
  85.  
  86.  
  87. };
  88.  
  89. std::ostream& operator <<(std::ostream, const SafeArray &);
  90.  
  91.  
  92.  
  93.  
  94. //Safe Array cpp
  95. #include"SafeArray.h"
  96. #include<iostream>
  97. #include<cassert>
  98.  
  99. //sizeOfArray
  100. //arr
  101.  
  102. SafeArray::SafeArray(): sizeOfArray(0),arr(NULL){}
  103. SafeArray::SafeArray(size_t sz):sizeOfArray(sz),arr(new int[sizeOfArray]){}
  104.  
  105. SafeArray::SafeArray(int* arr, size_t sizeOfArray){
  106.     this->sizeOfArray = sizeOfArray;
  107.     this->arr = new int[sizeOfArray];
  108.     for (size_t i = 0; i < sizeOfArray; i++)
  109.     {
  110.         this->arr[i] = arr[i];
  111.     }
  112. }
  113.  
  114. SafeArray::SafeArray(const SafeArray & right){
  115.     sizeOfArray = right.sizeOfArray;
  116.     arr = new int[sizeOfArray];
  117.     for (size_t i = 0; i < sizeOfArray; i++)
  118.     {
  119.         arr[i] = right.arr[i];
  120.     }
  121. }
  122. SafeArray& SafeArray::operator = (const SafeArray &right){
  123.    
  124.     if (this == &right){ // a=a защита
  125.         if (arr != NULL){
  126.             //освобождаваме заетата памет
  127.             delete[]arr;
  128.         }
  129.     }
  130.     sizeOfArray = right.sizeOfArray;
  131.     arr = new int[sizeOfArray];
  132.     for (size_t i = 0; i < sizeOfArray; i++)
  133.     {
  134.         arr[i] = right.arr[i];
  135.     }
  136.     return *this;
  137. }
  138. SafeArray::~SafeArray(){
  139.     delete[] arr;
  140. }
  141.  
  142.  
  143. int SafeArray::set_sz(size_t pesho){
  144.     this->sizeOfArray = pesho;
  145.     return 0;
  146. }
  147. size_t SafeArray::get_sz() const{
  148.     return sizeOfArray;
  149. }
  150.  
  151. int& SafeArray::operator [](size_t index){
  152.     assert(index >= 0 && index < sizeOfArray);
  153.         //връща exception
  154.     return arr[index];
  155. }
  156.  
  157. int SafeArray::operator()(size_t index)const{
  158.     assert(index >= 0 && index < sizeOfArray);
  159.     int sum = 0;
  160.     for (size_t i = 0; i < index; i++)
  161.     {
  162.         sum += arr[index];
  163.     }
  164.     return sum;
  165. }
  166. int & SafeArray::operator [](size_t index) const{
  167.     assert(index >= 0 && index < sizeOfArray);
  168.     //връща exception
  169.     return arr[index];
  170. }
  171.  
  172. std::ostream& operator <<(std::ostream out, const SafeArray & object){
  173.  
  174.     out << "{";
  175.     for (size_t i = 0; i < object.get_sz(); i++)
  176.     {
  177.         out << object[i] << " , ";
  178.         if (i = object.get_sz() - 1){
  179.             out << object[i];
  180.         }
  181.     }
  182.     out << "}";
  183.  
  184.     return out;
  185. }
  186. //IDGenerator header
  187. #pragma once
  188.  
  189. class IDGenerator{
  190. private:
  191.  
  192.     static size_t id;
  193.  
  194. public:
  195.     static size_t idIncr();
  196.  
  197. };
  198. //IDGenerator cpp
  199. #include"IDGenerator.h"
  200. #include<iostream>
  201.  
  202. //мога да инициализирам тук
  203. size_t IDGenerator::id = 1;
  204.  
  205. size_t IDGenerator::idIncr(){
  206.     return ++id;
  207. }
  208.  
  209.  
  210. #include"IDGenerator.h"
  211. #include"SafeArray.h"
  212. #include<iostream>
  213.  
  214. using namespace std;
  215.  
  216. int main(){
  217.     //мога да инициализирам static и тук, въпреки, че е private
  218.  
  219.     for (size_t i = 0; i < 20; i++)
  220.     {
  221.         cout << IDGenerator::idIncr() << endl;
  222.     }
  223.  
  224.     SafeArray arr(10);
  225.  
  226.     for (size_t i = 0; i < 10; i++)
  227.     {
  228.         arr[i] = IDGenerator::idIncr();
  229.     }
  230.     cout << arr << endl;
  231. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement