Witam, uczę się przeciążenia operatorów i 2 problemy.
Otóż chcę uzyskać nowy wektor (o takiej budowie: 3 1 5 10 8 - tzn. nie wektor z matematycznej definicji) poprzez przemnożenie już 2 istniejących lub 1 istniejącego przez liczbę (skalar).
Mam takie 2 przypadki:
Plik main:
wektor wek_3 = wek_1 * wek_2;
wektor wek_4 = wek_3 * liczba;
W pliku nagłówkowym klasy "wektor":
void mnoz( const wektor & b );
static wektor mnoz_2_wektory( const wektor & a, const wektor & b );
static wektor mnoz_przez_liczbe( const wektor & a, double liczba );
wektor operator *( const wektor & b );
Zaś w .cpp:
void wektor::mnoz( const wektor & b )
{
assert( this->ilosc == b.ilosc );
for( uint32_t i = 0; i < this->ilosc; i++ )
{
this->wartosci_tab[ i ] *= b.wartosci_tab[ i ];
}
}
wektor wektor::mnoz_2_wektory( const wektor & a, const wektor & b )
{
wektor wek_wynik( a.ilosc );
for( uint32_t i = 0; i < a.ilosc; i++ )
{
wek_wynik.wartosci_tab[ i ] = a.wartosci_tab[ i ] * b.wartosci_tab[ i ];
}
return wektor( wek_wynik );
}
wektor wektor::mnoz_przez_liczbe( const wektor & a, double liczba )
{
wektor wek_wynik( a.ilosc );
wektor::liczba = liczba;
for( uint32_t i = 0; i < a.ilosc; i++ )
{
wek_wynik.wartosci_tab[ i ] = a.wartosci_tab[ i ] * liczba;
std::cout << wek_wynik.wartosci_tab[ i ] << " " << endl;
}
return wektor( wek_wynik );
}
wektor wektor::operator *( const wektor & b )
{
this->mnoz( b );
return * this;
}
I tutaj mam 2 problemy (przypadki):
1. Nie wiem czemu DZIAŁA mi mnożenie 2 wektorów. Powyższy zapis w main.cpp jest po to, aby korzystał z operatora mnożenia, który zaś wywołuje:
void wektor::mnoz( const wektor & b );
Początkowo metoda "mnoz" miała służyć do mnożenia wektora przez siebie, jednak jak się okazuje również działa w przypadku mnożenia 2 wektorów i przekazania ich iloczynu do trzeciego, nowego wektora.
Tak więc jakim prawem to działa, skoro
this->wartosci_tab[ i ]
to tablica z NOWEJ instancji klasy wektor (wek_3) i metoda przyjmuje tylko 1 wektor "b"? Brakuje mi drugiego wektora do mnożenia...
Gdy próbowałem użyć:
this->mnoz_2_wektory zamiast this->mnoz
(w operatorze) to miałem problemy (brak inicjalizacji, bo metoda ma mieć 2 argumenty). Tak samo z przekazaniem 2 argumentów do operatora, który przyjmuje tylko 1.
Dokładnie tak samo mam z analogicznymi metodami dodawania: metoda z 1 argumentem "dodaj" miała dodawać do siebie wektor, a działa w przypadku 2 dodawania różnych wektorów i zapisania ich wyniku w trzecim.
2. W powyższej formie (wektor wek_4 = wek_3 * liczba) chciałbym mieć mnożenie przez liczbę, które nie działa.
Mnożenie mam mieć pośrednio z użyciem operatora, a nie odwołując się w main do konkretnej metody konkretnej instancji klasy wektor.
Jak mam to zrobić, aby w zależności czy zrobię tak:
wektor wek_3 = wek_1 * wek_2;
czy tak:
wektor wek_4 = wek_3 * liczba;
gdzie drugi czynnik to raz liczba, raz wektor robiło mi odpowiednie obliczenia (metody) z wykorzystaniem operatora?
Bardzo prosiłbym o pomoc w tych kwestiach.
Pozdrawiam