Advertisement
rizky_herucakra

safe-array

Aug 29th, 2013
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.18 KB | None | 0 0
  1. //
  2. //  main.cpp
  3. //  safe_array
  4. //
  5. //  Created by Rizky Herucakra on 8/29/13.
  6. //  Copyright (c) 2013 Rizky Herucakra. All rights reserved.
  7. //
  8.  
  9. #include <iostream>
  10.  
  11.  
  12. class safe_array{
  13.     int* imp;
  14.     unsigned int size_;
  15.     void resize(unsigned int);
  16. public:
  17.     safe_array(unsigned int size = 1);
  18.     ~safe_array();
  19.     safe_array(const safe_array&) = delete;
  20.     safe_array& operator = (const safe_array&) = delete;
  21.    
  22.     int& operator[](unsigned int);
  23.    
  24.     friend void print(const safe_array&);
  25.     friend unsigned int size(const safe_array&);
  26. };
  27.  
  28. safe_array::safe_array(unsigned int sz):size_(sz){
  29.     imp = new int[size_];
  30. }
  31.  
  32. int& safe_array::operator[](unsigned int index){
  33.     if (index < size_) return imp[index];
  34.     else {
  35.         resize(index + 1);
  36.         return imp[index];
  37.     }
  38. }
  39.  
  40. void safe_array::resize(unsigned int newsize){
  41.     int* tmp = new int[newsize];
  42.     for (int i = 0; i < newsize; ++i){
  43.         tmp[i] = 0;
  44.     }
  45.     for (int i = 0; i < size_; ++i){
  46.         tmp[i] = imp[i];
  47.     }
  48.     int* tmp2 = imp;
  49.     imp = tmp;
  50.     delete tmp2;
  51.     size_ = newsize;
  52. }
  53.  
  54. safe_array::~safe_array(){
  55.     delete [] imp;
  56. }
  57.  
  58. unsigned int size(const safe_array& a){
  59.     return a.size_;
  60. }
  61.  
  62. void print(const safe_array& a){
  63.     using namespace std;
  64.     for (unsigned int i = 0; i < a.size_;++i){
  65.         cout << a.imp[i] << ' ';
  66.     }
  67. }
  68.  
  69.  
  70. int main(int argc, const char * argv[])
  71. {
  72.     using namespace std;
  73.     try{
  74.        
  75.    
  76.         int sz;
  77.         cout<<"Enter size of Array"<<endl;
  78.         cin>> sz;
  79.    
  80.         safe_array array(sz);  // create an array of the safe_array class
  81.    
  82.         cout<<"Enter "<< size(array)<<" Elements :"<<endl;
  83.    
  84.         for (int i = 0; i < size(array); i++){
  85.             cout<<"array["<< i + 1 <<"] = : ";
  86.             cin>>array[i];
  87.         }
  88.         print(array);
  89.    
  90.         cout << endl;
  91.    
  92.         array[size(array) + 1] = 25; //Checks for Array Bound
  93.    
  94.         print(array);
  95.    
  96.         cout << endl;
  97.     } catch(const bad_alloc& ba){
  98.         cout << "Cannot allocate memory" << endl;
  99.     }
  100.     catch(...){
  101.         cout << "unspecified error" << endl;
  102.     }
  103.  
  104.  
  105. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement