Przeładowanie operatorów - więcej argumentów

Przeładowanie operatorów - więcej argumentów
xorgx3
  • Rejestracja:prawie 14 lat
  • Ostatnio:około miesiąc
  • Postów:134
0

Piszę dość prostą klasę, tak w ramach treningu, no i potrzebuję drobnej pomocy.

Po pierwsze: czy można w jakiś ładny sposób zrobić tak, by dzięki operatorowi + dodawać więcej niż dwa obiekty klasy? Tzn czy można wykonać operację : a=b+c+d+e+f+g... itp

Drugie pytanie dotyczy operatora '' - chciałbym móc mnożyć zarówno a=2b jak i a = b*2, jednak z tego co czytałem to pierwszym argumentem przy przeładowywaniu jest zawsze this na ten obiekt, więc w jaki sposób można to osiągnąć?
To napisałem a propoS przeładowania '
':

Kopiuj
Matrix Matrix::operator*(const double &m){
    Matrix result(this->rows, this->columns);
    for(int i=0;i<this->rows;++i){
        for(int j=0; j<this->columns;++j){
            result.tab[i][j]=m*this->tab[i][j];
        }
    }
    return result;
} 
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0
  1. Można. Czemu pytasz skoro nawet nie spróbowałeś? Jak przeładujesz operator+ to on zwraca obiekt klasy X, który można dodać do innego obiektu klasy X.
    2. Tak się nie da bo nie możesz przeładować operatora dla typów wbudowanych.

"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
edytowany 1x, ostatnio: Shalom
RE
Moderator
  • Rejestracja:około 18 lat
  • Ostatnio:około rok
2
  1. Tak się nie da bo nie możesz przeładować operatora dla typów wbudowanych.

He?

Matrix operator*(int, const Matrix&) { ... }

To oczywiście deklaracja operatora poza twoją klasą. Żeby nie wynosić implementacji klasy poza nią możesz w ciele tego operatora zrobić jakieś matrix.Multiply(int) - albo jak dragon niżej zaproponował wywołać już istniejący.

edytowany 3x, ostatnio: Rev
_13th_Dragon
... raczej double zamiast int
RE
a, zasugerowałem się tym 2*b w poście; to nieistotne z resztą.
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:3 miesiące
4
  1. Matrix Matrix::operator+(const Matrix &m)const { Matrix tmp; ... return tmp; } // Bez problemu obsłuży serię.
  2. Też się da:
Kopiuj
Matrix Matrix::operator*(const double &v)const { ... }
Matrix operator*(const double &v,const Matrix &m) { return m.operator*(v); } // to funkcja nie metoda

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
xorgx3
  • Rejestracja:prawie 14 lat
  • Ostatnio:około miesiąc
  • Postów:134
0

Napisanie tego operatora w sposób jaki zaproponował _13th_Dragon poza ciałem klasy działa, jednak nie chciałbym by cokolwiek dotyczące klasy było poza nią.

Z tą linijką nie wiem co zrobić za bardzo:

Kopiuj
Matrix Matrix::operator*(const double &v)const { ... } 

Dodanie jej kończy się takim samym errorem, jak bez "const".

Edit:
Heh, przeciążenie plusa jednak działało zanim zadałem pytanie - tylko coś źle wywoływałem.

edytowany 2x, ostatnio: xorgx3
0
xorgx3 napisał(a):

Napisanie tego operatora w sposób jaki zaproponował _13th_Dragon poza ciałem klasy działa, jednak nie chciałbym by cokolwiek dotyczące klasy było poza nią.

Inaczej tego nie zrobisz. Jak przeładowany operator jest wewnątrz klasy to pierwszym parametrem jest zawsze this.

_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:3 miesiące
1
xorgx3 napisał(a):

Napisanie tego operatora w sposób jaki zaproponował _13th_Dragon poza ciałem klasy działa, jednak nie chciałbym by cokolwiek dotyczące klasy było poza nią.

Z tą linijką nie wiem co zrobić za bardzo:

Kopiuj
Matrix Matrix::operator*(const double &v)const { ... } 

Dodanie jej kończy się takim samym errorem, jak bez "const".

Chrzani waść: http://ideone.com/cOVVAp


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
xorgx3
  • Rejestracja:prawie 14 lat
  • Ostatnio:około miesiąc
  • Postów:134
0

Dobra, chyba faktycznie tak musi zostać, choć nie podoba mi się definiowanie tego poza ciałem klasy, jeszcze się zastanowię czy na pewno mi potrzebny taki feature :)

xorgx3
Heh, dzięki, na to nie wpadłem :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.