2010-09-21 13 views
5

mam 2 klas, które stanowią matrycę:
1. RegularMatrix - O (N^2) reprezentacja
2. macierz rzadka - matryca, która jest reprezentowana jako związane z listy (bez zer).przemienne oprator przeciążenia + 2 różnych obiektów

powiedzmy mam:

RegularMatrix a; 
SparseMatrix b; 

chcę móc to zrobić:

a+b; 

a ponadto:

b+a; 

więc jestem przeciążenia operatora +. Moje pytanie brzmi, skoro chcę, aby dodatek był przemienny (a + b = b + a), czy muszę wprowadzić 2 przeciążenia, po jednym dla każdego przypadku?

RegularMatrix operator+(const RegualarMatrix &, const SparseMatrix &); 
RegularMatrix operator+(const SparseMatrix & ,const RegualarMatrix &); 

lub czy istnieje ogólna forma, którą kompilator sam decyduje?

Dziękujemy

Odpowiedz

6

Tak, potrzebujesz obu wersji. Ale można przekazać jeden do drugiego, jeśli operacja naprawdę jest przemienne

RegularMatrix operator+(const SparseMatrix &a, const RegualarMatrix &b) { 
    return b + a; 
} 
+3

Tak. Pewnie. Skradnij się kilka sekund przede mną. Tak jak naprawdę potrzebujesz punktów ... – dmckee

+0

Dziękuję ... I jeszcze jedno, co mnie interesuje, czy uważa się, że lepszym programowaniem jest zwrócenie odwołania do RegularMatrix niż zwrócenie obiektu według wartości? –

+0

@dmckee: Aby być uczciwym, to było więcej niż minutę. ':)' – sbi

0

wymagane są obie wersje, wystarczy napisać po pierwszym przeciążeniem:

RegularMatrix operator+(const SparseMatrix &a, const RegualarMatrix &b) 
{ 
    return operator+(b,a); 
} 

lub prostsza wersja:

RegularMatrix operator+(const SparseMatrix &a, const RegualarMatrix &b) 
{ 
    return b + a; 
} 
Powiązane problemy