SHARE
TWEET

Untitled

a guest Jan 24th, 2020 56 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include "vettore.h"
  3. using std::ostream;
  4. using std::endl;
  5. using std::cout;
  6.  
  7. vettore::vettore(unsigned int s, int x):punt(s == 0 ? nullptr : new int[s]), size(s){
  8.     for(int i=0; i<size; ++i){
  9.         punt[i]=x;
  10.     }
  11. }
  12. unsigned int vettore::_size() const{
  13.     return size;
  14. }
  15. vettore::vettore(const vettore& v):punt(v._size() == 0 ? nullptr : new int[v._size()]), size(v._size()){
  16.     for(int i=0; i<size; ++i){
  17.         this[i] = v[i];                                                                      // lui fa cosi v.punt[i], ma perché NON v[i] direttamente??
  18.                                                                                                   // soprattutto essendo l'perator[] ridefinio;  
  19.     }
  20. }
  21. vettore::~vettore(){
  22.     delete[] punt;
  23. }
  24. ostream& operator<<(ostream& os, const vettore& v){
  25.     for(int i=0; i<v._size(); ++i){
  26.         os<<" "<<v[i];
  27.     }
  28.     return os;
  29. }
  30.  
  31. int& vettore::operator[](unsigned int i) const{
  32.     return punt[i];
  33. }
  34.  
  35. vettore operator+(const vettore& v1, const vettore& v2){                        // quandi si è costretti ad avere due operatori, usare sempre oggetto di supporto
  36.     vettore aux(v1._size()+v2._size());                                           // mi serve un indice per entrambi
  37.     int i=0,sec=0;
  38.     for(i; i<v1._size(); ++i) aux[i]=v1[i];
  39.     for(i; i<aux._size(); ++i){
  40.         aux[i]=v2[sec];
  41.         sec++;
  42.     }
  43.     return aux;
  44. }
  45. void vettore::append(const vettore& v){               //domanda magari stupida, ma se io dereferenzio *this ottengo l'oggetto di invocazione perch* this è un puntatore a calsse o tipo giusto ?
  46.     *this=*this+v;
  47. }
  48. bool vettore::operator==(const vettore& v)const{      // da chidere perché *this == v.punt non va bene e perché *this.punt == v.punt non va bene
  49.     if(this == &v) return true;
  50.     if(this->size != v._size()) return false;
  51.     for(int i=0; i<this->size; ++i){
  52.         if(this->punt[i] != v[i]) return false;                  // perché con v[i] okay e con *this[i] non funge ? okay basta aggiungere le parentesi bha
  53.     }
  54.     return true;
  55. }
  56. vettore& vettore::operator=(const vettore& v){                
  57.     if(this != &v){
  58.         delete[] punt;
  59.         punt = v._size() == 0 ? nullptr : new int[v._size()];
  60.         size=v._size();
  61.         for(int i=0; i<v._size(); ++i){
  62.             this->punt[i] = v[i];
  63.         }    
  64.     }
  65.     return *this;                                                   // perché devo ritornare *this e non semplicemente this?
  66. }                                
  67. int main() {
  68.   vettore v1(1), v2(3), v3(2,1);
  69.   v1 = v2+v3;
  70.   v2.append(v1);
  71.   v3.append(v1);
  72.   cout << v1 <<" v1"<<endl;
  73.   cout << v2 <<" v2"<<endl;
  74.   cout << v3 <<" v3" <<endl;
  75. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top