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 |