Forum Informatyka UJ forum Strona Główna Informatyka UJ forum
Rocznik 2005 - czyli najlepsze forum w sieci
 
 FAQFAQ   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy   GalerieGalerie   RejestracjaRejestracja 
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

Egzamin z zeszłego roku
Idź do strony Poprzedni  1, 2
 
Napisz nowy temat   Odpowiedz do tematu    Forum Informatyka UJ forum Strona Główna -> Archiwum / 1 rok / 2 i 3 semestr - Programowanie
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

PostWysł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 profil autora
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

PostWysł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
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Roxel
pijak



Dołączył: 06 Kwi 2006
Posty: 249
Przeczytał: 0 tematów

Skąd: Pszczyna

PostWysłany: Pią 22:28, 26 Sty 2007    Temat postu:

@pazabo, Pawel Str.:
Dzieki, juz wszystko jasne :D
Powrót do góry
Zobacz profil autora
Wyświetl posty z ostatnich:   
Napisz nowy temat   Odpowiedz do tematu    Forum Informatyka UJ forum Strona Główna -> Archiwum / 1 rok / 2 i 3 semestr - Programowanie Wszystkie czasy w strefie EET (Europa)
Idź do strony Poprzedni  1, 2
Strona 2 z 2

 
Skocz do:  
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
Regulamin