Przeciążenie operatora przy operacjach na wektorach
Ostatnio zmodyfikowano 2017-03-31 08:59
andrzejek97 Temat założony przez niniejszego użytkownika  | 
» 2017-03-30 23:05:37 Czyli tak? CVector & operator =( const CVector & param ) {     delete[] tablica;     tablica = new float[ rozmiar ];     if( this == & param ) throw "blad";          for( int i = 0; i < rozmiar; i++ )     {         tablica[ i ] = param.tablica[ i ];     } }
   | 
 | 
karambaHZP  | 
» 2017-03-31 00:31:05 if( this == & param ) throw "blad";  |  
 Po co rzucać wyjątkami, skoro wystarczy zwrócić dany obiekt bez modyfikacji? Daj sprawdzanie jako pierwszą instrukcję w bloku. if( this == & param ) { return * this; }  | 
 | 
andrzejek97 Temat założony przez niniejszego użytkownika  | 
» 2017-03-31 07:13:28 Takie mam wytyczne zadania, mam sprawdzać czy  w przypadku operatora = nie zostało wykonane przypisanie do samego siebie, w przypadku operacji artmetycznych czy rozmiary obiektu są takie same, w przypadku operatora [] czy nie podany został indeks z poza zakresu, mam zadbać o zwracanie odpowiednich wyjątków, więc float & operator []( int j ) { if( j >= rozmiar || j < 0 ) { throw "Zly rozmiar"; } return tablica[ j ]; } const float & operator []( int j ) const { if( j >= rozmiar && j < 0 ) { throw "Zly rozmiar"; } return tablica[ j ]; }   Vector Vector::operator +( const Vector & param ) {               Vector temp( rozmiar );     if( rozmiar != param.rozmiar ) throw "Niezgodne rozmiary wektorow";          for( int i = 0; i < rozmiar; i++ )     {         temp.tablica[ i ] = tablica[ i ] + param.tablica[ i ];     }          return temp;  Wklejam też cały kod  #include<iostream> using namespace std;
  class Vector {     int rozmiar;     float * tablica; public:     Vector( int size );     Vector( const Vector & param )     {         tablica = new float[ param.rozmiar ];         for( int i = 0; i < rozmiar; i++ )         {             tablica[ i ] = param.tablica[ i ];         }     }     Vector & operator =( const Vector & param )     {         if( this == & param ) throw "blad";                  delete[] tablica;         tablica = new float[ rozmiar ];         for( int i = 0; i < rozmiar; i++ )         {             tablica[ i ] = param.tablica[ i ];         }     }     Vector operator +( const Vector & );     Vector operator -( const Vector & );     Vector operator *( float d );     Vector operator /( float d );     ~Vector();     float & operator []( int j ) { if( j >= rozmiar || j < 0 ) { throw "Zly rozmiar"; } return tablica[ j ]; }     const float & operator []( int j ) const { if( j >= rozmiar && j < 0 ) { throw "Zly rozmiar"; } return tablica[ j ]; }      };
  Vector Vector::operator +( const Vector & param ) {               Vector temp( rozmiar );     if( rozmiar != param.rozmiar ) throw "Niezgodne rozmiary wektorow";          for( int i = 0; i < rozmiar; i++ )     {         temp.tablica[ i ] = tablica[ i ] + param.tablica[ i ];     }          return temp;      } Vector Vector::operator -( const Vector & param ) {          Vector temp( rozmiar );          for( int i = 0; i < rozmiar; i++ )     {         temp.tablica[ i ] = tablica[ i ] - param.tablica[ i ];     }     return temp; } Vector Vector::operator *( float d ) {     Vector temp( rozmiar );     for( int i = 0; i < rozmiar; i++ )     {         temp.tablica[ i ] = tablica[ i ] * d;     }     return temp; } Vector Vector::operator /( float d ) {     Vector temp( rozmiar );     for( int i = 0; i < rozmiar; i++ )     {         temp.tablica[ i ] = tablica[ i ] / d;     }     return temp; }
  Vector::Vector( int size )     : rozmiar( size ) {     tablica = new float[ rozmiar ];     for( int i = 0; i < rozmiar; i++ )     {         tablica[ i ] = 0;     } } Vector::~Vector() {     delete[] tablica; }
 
  int main() {     int wielkosc;     cout << "Podaj wielkosc wektora: ";     cin >> wielkosc;     Vector pierwszy_wektor( wielkosc );     for( int i = 0; i < wielkosc; i++ )     {         pierwszy_wektor[ i ] = i + 1;         cout << pierwszy_wektor[ i ] << '\n';     }     Vector drugi_wektor( wielkosc );     cout << "\nWektor drugi: \n";     for( int i = 0; i < wielkosc; i++ )     {         drugi_wektor[ i ] = i + 2;         cout << drugi_wektor[ i ] << '\n';     }     Vector result( wielkosc );     cout << "Podaj mnoznik\n";     float dd;     cin >> dd;     result = pierwszy_wektor * dd;     cout << "Wynik mnozenia pierwszego wektora przez liczbe:\n";     for( int i = 0; i < wielkosc; i++ )          cout << "Wynik mnozenia = " << result[ i ] << '\n';          result = pierwszy_wektor + drugi_wektor;     cout << "wynik dodawania dwoch wektorow\n";     for( int i = 0; i < wielkosc; i++ )          cout << "Wynik dodawania = " << result[ i ] << '\n';          return 0; } 
   | 
 | 
karambaHZP  | 
» 2017-03-31 08:59:34 | w przypadku operatora [] czy nie podany został indeks z poza zakresu |  
 W standardzie  operator []  nie sprawdza indeksów (zadanie to należy do programisty), natomiast metoda  .at()  sprawdza i rzuca wyjątkiem  out_of_range w przypadku wyjścia poza poprawne indeksy. | przypadku operatora = nie zostało wykonane przypisanie do samego siebie |  
 W przypadku wykrycia takiej sytuacji, operator zwraca samego siebie.  | 
 | 
| 1 « 2 »  |