Przeciążenie operatora przy operacjach na wektorach
Ostatnio zmodyfikowano 2017-03-31 08:59
andrzejek97 Temat założony przez niniejszego użytkownika  | 
Przeciążenie operatora przy operacjach na wektorach » 2017-03-29 11:58:36 Witam, mam pewien problem z zadaniem, które muszę zrobić, miałem stworzyć klasę opisującą wektor liczb, rozmiar wektora ma być parametrem konstruktora, w konstruktorze ma być rezerwowana pamięć, w destruktorze ma być zwalniana, miałem też przeładować operator tablicowy i dotąd wydaje mi się, że udało mi się wykonać zadanie, muszę przeładować jeszcze operator + - * / żeby można było dokonywać operacji arytmetycznych na parach wektorów i tutaj nie wiem jak to zapisać, rozumiem, że jeśli wektory mają rozmiar np 5 to do pierwszej współrzędnej pierwszego wektora dodajemy pierwszą drugiego itd, prosiłbym o przykład jak to zapisać dla dodawania, mam problem ze składnią, jestem początkujący. Poniżej wklejam kod tego co udało mi się napisać.  #include<iostream> using namespace std;
  class CVector {     int rozmiar;     float * tablica; public:     CVector( int size );     CVector();     CVector operator +( const CVector & );     CVector operator -( const CVector & );     CVector operator *( const CVector & );     CVector operator /( const CVector & );     ~CVector();     float & operator []( int j ) { return tablica[ j ]; }     const float & operator []( int j ) const { return tablica[ j ]; } };
  CVector CVector::operator +( const CVector & param ) {                                             CVector::CVector( int size )         : rozmiar( size )     {         tablica = new float[ rozmiar ];         for( int i = 0; i < rozmiar; i++ )         {             tablica[ i ] = 0;         }     }     CVector::~CVector()     {         delete[] tablica;     }               int main()     {         int wielkosc;         cout << "Podaj wielkosc wektora: ";         cin >> wielkosc;         CVector jakis_wektor( wielkosc );         for( int i = 0; i < wielkosc; i++ )         {             jakis_wektor[ i ] = i;             cout << jakis_wektor[ i ] << '\n';         }         jakis_wektor[ 5 ] = 8;         cout << "wartosc wspolrzednej wektora czwarty " << jakis_wektor[ 3 ];         CVector drugi_wektor( wielkosc );         cout << "\nWektor drugi: \n";         for( int i = 0; i < wielkosc; i++ )         {             jakis_wektor[ i ] = i;             cout << jakis_wektor[ i ] << '\n';         }                  return 0;     }
   | 
 | 
darko202  | 
» 2017-03-29 12:37:55  | 
 | 
mateczek  | 
» 2017-03-29 13:50:51 znajdź różnicę ?? miedzy tymi linijkami. Próbujesz stworzyć obiekt bez podania rozmiaru (a nie masz do tego konstruktora) a potem dodawać??   CVector jakis_wektor( wielkosc ); CVector temp;  | 
 | 
andrzejek97 Temat założony przez niniejszego użytkownika  | 
» 2017-03-29 14:46:45 Już zmieniłem na  CVector temp( rozmiar )  i usunąłem tę linijkę CVector();  | 
 | 
andrzejek97 Temat założony przez niniejszego użytkownika  | 
» 2017-03-30 22:20:24 Mam pytanie, jak powinno wyglądać sprawdzenie czy w konstruktorze kopiującym nie przypisuje obiektu do samego siebie CVector( const CVector & param ) {     tablica = new float[ param.rozmiar ];     for( int i = 0; i < rozmiar; i++ )     {         tablica[ i ] = param.tablica[ i ];     } }  | 
 | 
Monika90  | 
» 2017-03-30 22:31:28 Konstruktor kopiujący to nie jest operator przypisania, więc nie ma sensu tego sprawdzać.  | 
 | 
andrzejek97 Temat założony przez niniejszego użytkownika  | 
» 2017-03-30 22:36:51 Pomyliłem się, miał to być operator przypisania  CVector & operator =( const CVector & param ) {     delete[] tablica;     tablica = new float[ rozmiar ];     for( int i = 0; i < rozmiar; i++ )     {         tablica[ i ] = param.tablica[ i ];     } }  | 
 | 
karambaHZP  | 
» 2017-03-30 22:52:02 Sprawdzasz adres argumentu z adresem wskaźnika  this .  | 
 | 
|  « 1 »  2 |