Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- // main.cpp
- // safe_array
- //
- // Created by Rizky Herucakra on 8/29/13.
- // Copyright (c) 2013 Rizky Herucakra. All rights reserved.
- //
- #include <iostream>
- class safe_array{
- int* imp;
- unsigned int size_;
- void resize(unsigned int);
- public:
- safe_array(unsigned int size = 1);
- ~safe_array();
- safe_array(const safe_array&) = delete;
- safe_array& operator = (const safe_array&) = delete;
- int& operator[](unsigned int);
- friend void print(const safe_array&);
- friend unsigned int size(const safe_array&);
- };
- safe_array::safe_array(unsigned int sz):size_(sz){
- imp = new int[size_];
- }
- int& safe_array::operator[](unsigned int index){
- if (index < size_) return imp[index];
- else {
- resize(index + 1);
- return imp[index];
- }
- }
- void safe_array::resize(unsigned int newsize){
- int* tmp = new int[newsize];
- for (int i = 0; i < newsize; ++i){
- tmp[i] = 0;
- }
- for (int i = 0; i < size_; ++i){
- tmp[i] = imp[i];
- }
- int* tmp2 = imp;
- imp = tmp;
- delete tmp2;
- size_ = newsize;
- }
- safe_array::~safe_array(){
- delete [] imp;
- }
- unsigned int size(const safe_array& a){
- return a.size_;
- }
- void print(const safe_array& a){
- using namespace std;
- for (unsigned int i = 0; i < a.size_;++i){
- cout << a.imp[i] << ' ';
- }
- }
- int main(int argc, const char * argv[])
- {
- using namespace std;
- try{
- int sz;
- cout<<"Enter size of Array"<<endl;
- cin>> sz;
- safe_array array(sz); // create an array of the safe_array class
- cout<<"Enter "<< size(array)<<" Elements :"<<endl;
- for (int i = 0; i < size(array); i++){
- cout<<"array["<< i + 1 <<"] = : ";
- cin>>array[i];
- }
- print(array);
- cout << endl;
- array[size(array) + 1] = 25; //Checks for Array Bound
- print(array);
- cout << endl;
- } catch(const bad_alloc& ba){
- cout << "Cannot allocate memory" << endl;
- }
- catch(...){
- cout << "unspecified error" << endl;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement