• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Czemu ten kod wyświetla -10 zamiast 10?

42 Warsaw Coding Academy
0 głosów
826 wizyt
pytanie zadane 17 lutego 2016 w C i C++ przez Daaa22 Dyskutant (8,250 p.)
zamknięte 17 lutego 2016 przez Daaa22
#include <iostream>

typedef float f;

f A(f n){if(n<0)n=-n;return n;}

int main()
{
	std::cout << f(-10);
}

 

komentarz zamknięcia: Już rozwiązałem :)

3 odpowiedzi

+2 głosów
odpowiedź 17 lutego 2016 przez Eryk Andrzejewski Mędrzec (164,260 p.)
wybrane 17 lutego 2016 przez Daaa22
 
Najlepsza

Za pomocą typedef tworzony jest alias f do typu float. Zauważ, że f to nie jest nazwa funkcji, ale "inna nazwa" typu float. Używając f(-10) nie używasz funkcji, tylko rzutujesz wartość -10 na typ float, a więc nic się nie zmienia. Musisz użyć A(-10).

A tak na drugi raz - to nie używaj pojedynczych liter, bo zaś się można pogubić, o czym świadczy twój przypadek

komentarz 17 lutego 2016 przez Patrycjerz Mędrzec (192,320 p.)

Wygrałeś, haha laugh

komentarz 17 lutego 2016 przez Eryk Andrzejewski Mędrzec (164,260 p.)

W tą grę wygrałem? :D

komentarz 17 lutego 2016 przez Daaa22 Dyskutant (8,250 p.)

@Eryk Andrzejewski Nie zauważyłem tego, masz najlepszą odpowiedź za ten obrazek :)

+4 głosów
odpowiedź 17 lutego 2016 przez niezalogowany
Bo nie wywołujesz funkcji tylko konstruktor float
komentarz 17 lutego 2016 przez Eryk Andrzejewski Mędrzec (164,260 p.)
A co to konstruktor float? Ja myślałem że float jest jednym z typów podstawowych, a nie obiektem klasy, a f(-10) to rzutowanie :D Chociaż kto wie, mogę się mylić ;)
komentarz 17 lutego 2016 przez niezalogowany
Typy podstawowe też mają konstruktory. Do autora tematu, jeśli tworzysz aliasy to nazywaj je z dużych liter i długo.
komentarz 17 lutego 2016 przez Eryk Andrzejewski Mędrzec (164,260 p.)
Okej, przepraszam i zwracam honor :) Wina niedoczytania ;)
komentarz 17 lutego 2016 przez draghan VIP (106,230 p.)

Typy podstawowe również mają konstruktory*, żeby możliwa była jednolita inicjalizacja - zauważ, że na liście inicjalizacyjnej konstruktora piszesz:

class Foo
{
    int x;
    Foo(int i)
    : x(i) // nie przypomina konstruktora...? :)
    {
       int y = int(); // i niespodzianka - tak też można ;)
    }
};

__________

* - czy też może inaczej: możliwy jest "konstruktorowy zapis", bo nie wiem, czy rzeczywiście jest wywoływana jakaś funkcja przy konstrukcji takiego inta - raczej wątpię.

EDIT: badbullpl mnie wyprzedził. :<

komentarz 17 lutego 2016 przez Eryk Andrzejewski Mędrzec (164,260 p.)
Dziękuję, faktycznie draghan, teraz mi to uświadomiłeś o tej liście inicjalizacyjnej :)
komentarz 17 lutego 2016 przez niezalogowany
Może i wyprzedziłem, ale ty o wiele lepiej wszystko wytłumaczyłeś :)
+2 głosów
odpowiedź 17 lutego 2016 przez Radfler VIP (101,030 p.)

Powinieneś wywołać funkcję A, a nie tworzyć zmienną float.

komentarz 17 lutego 2016 przez Eryk Andrzejewski Mędrzec (164,260 p.)
Ale czy on tworzy zmienną? On raczej rzutuje wartość -10 na typ float :)
komentarz 17 lutego 2016 przez Radfler VIP (101,030 p.)
Tworzy, rzutuje... tu i tak na jedno wychodzi ;)
komentarz 17 lutego 2016 przez Eryk Andrzejewski Mędrzec (164,260 p.)
edycja 17 lutego 2016 przez Eryk Andrzejewski

No wychodzi na to, że jemu nie działa xD

Ale to jest moim zdaniem rzutowanie :D

Nie fakt, to może też być deklaracja zmiennej, zwracam honor ;)

Dobra pieprzyć, już dostał odpowiedzi, nie ma co nawijać tematu

Podobne pytania

0 głosów
4 odpowiedzi 441 wizyt
pytanie zadane 6 grudnia 2015 w C i C++ przez tetriss Obywatel (1,710 p.)
0 głosów
1 odpowiedź 840 wizyt
pytanie zadane 28 marca 2016 w C i C++ przez Daaa22 Dyskutant (8,250 p.)
+1 głos
4 odpowiedzi 2,392 wizyt
pytanie zadane 7 sierpnia 2015 w PHP przez migacz100 Mądrala (5,410 p.)

93,381 zapytań

142,380 odpowiedzi

322,535 komentarzy

62,738 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...