|
Informatyka UJ forum Rocznik 2005 - czyli najlepsze forum w sieci
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
pazabo
pijak
Dołączył: 02 Lut 2006
Posty: 60
Przeczytał: 0 tematów
Skąd: Kraków
|
Wysłany: Pią 21:23, 26 Sty 2007 Temat postu: |
|
|
Kompilator widzi, że dla complex ma jeden operator+, więc chce zamienić albo z na float (co mu się nie udaja, bo nie jest zdefiniowane rzutowanie), albo float na complex. Konstruktor complex(float) dokładnie to robi, czyli:
z = z + 2.0;
to tak naprawdę:
z = z + complex(2.0);
natomiast:
z = 2.0;
to:
z = complex(2.0);
Ostatnio zmieniony przez pazabo dnia Pią 21:24, 26 Sty 2007, w całości zmieniany 1 raz
|
|
Powrót do góry |
|
|
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
Pawel Str.
pijak
Dołączył: 06 Lut 2006
Posty: 429
Przeczytał: 0 tematów
Skąd: Ze starszego roku / Z Gorlic
|
Wysłany: Pią 21:23, 26 Sty 2007 Temat postu: |
|
|
Cytat: |
No a w przykladzie z = z + 2.0; konwersja moze przeciez pojsc na dwa sposoby:
1. do pola re zostanie dodane 2.0
2. do pola im zostanie dodane 2.0
Chyba ze zle rozumiem ta konwersje.
|
No niestety zupełnie źle to rozuumiesz.
z = z+2.0
Kompilator widzi operację na typie complex. Sprawdza dostępne funkcje complex::operator+(T) oraz ::operator+(T1, T2), gdzie T1 jest zgodne z complex a T2 z float.
Znajduje tylko jedną: complex::operator+(compex z).
Niezgodność typów - parametr formalny jest typu complex, parametr aktualny jest typu float.
Sprawdza dostępne ścieżki konwersji float -> complex. Istnieje dokładnie jedna taka ścieżka - konstruktor complex::complex(float). Dokonuje takiej konwersji.
Zatem kod będzie postaci:
complex temporary = complex(2.0);
complex temporary2 = z.operator+(temporary);
z = temporary2;
z=2.0;
Operator przypisania. Żaden nie jest zdefiniowany, więc został wygenerowany przez konstruktor automatycznie operator=(const complex&)
Kompilator napotyka instrukcję przypisania. Sprawdza dostępne operatory przypisania dla typu complex - znajduje ten wygenerowany automatycznie. Sprawdza typ - niezgodność. Używa tej samej konwersji niejawnej co wyżej.
z=2.0+z
Operacja dodawania. Z lewej jest typ wbudowany (float), zatem nie ma w której klasie szukać. Pozostaje szukanie funkcji globalnej operator+(T1,T2), która by pasowała, ew. konwersji complex->typ wbudowany. Nie znajduje żadnej pasującej funkcji, błąd kompilacji
z+= 2.0;
Klasa complex nie ma operatora += ; błąd kompilacji.
|
|
Powrót do góry |
|
|
|
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach
|
fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001, 2005 phpBB Group
|