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

Klasa 'konwertujaca'

VPS Starter Arubacloud
0 głosów
183 wizyt
pytanie zadane 17 marca 2020 w C i C++ przez Aleksandra01 Użytkownik (530 p.)
w jaki sposób mogę zapewnić narzedzie tej linijce kodu
eng ma być klasą konwertującą double na float :

const float numEng = ((eng)2.4);
komentarz 17 marca 2020 przez Aleksandra01 Użytkownik (530 p.)
tylko jak ta klasa ma zwracac ten typ?
komentarz 17 marca 2020 przez tkz Nałogowiec (42,000 p.)
Abstrahując, że działasz na stałych. Dwa pytania, poco to? I jak sobie wyobrażasz implementację? Pokaż chociaż wywołanie tych metod.
komentarz 17 marca 2020 przez Aleksandra01 Użytkownik (530 p.)
niestety takie zadanie,którego właśnie niekoniecznie rozumiem
to jest linijka z maina
później jedynie numEng jest wypisywany i tyle
komentarz 17 marca 2020 przez tkz Nałogowiec (42,000 p.)
A podasz polecenie?
komentarz 17 marca 2020 przez Aleksandra01 Użytkownik (530 p.)
Należy zdefiniować klasę pozwalającą na używanie w kodzie ang. i pol. zapisu liczb dziesietnych (polski zapis to druga część której tu nie podaje) tzn. przy użyciu kropki (lub przecinka)
komentarz 17 marca 2020 przez Aleksandra01 Użytkownik (530 p.)
wywołanie dla polskiego zapisu:

const float numPol = ((pol)3,4)
1
komentarz 17 marca 2020 przez tkz Nałogowiec (42,000 p.)

https://stackoverflow.com/questions/15220861/how-can-i-set-the-decimal-separator-to-be-a-comma 

W samym kodzie nie możesz użyć "," przy liczbach zmiennoprzecinkowych, po prostu język na to nie pozwoli. 

komentarz 17 marca 2020 przez Aleksandra01 Użytkownik (530 p.)
tych dwóch linijek nie mogę zmieniać, muszę resztę dopasować tak,żeby to działało
komentarz 17 marca 2020 przez tkz Nałogowiec (42,000 p.)
Po linii najmniejszego oporu możesz zrobić statyczną metodę przyjmującą dwie argumenty, liczbę przed przecinkiem i po przecinku, następnie je "łączymy" i zwracamy.
komentarz 17 marca 2020 przez jankustosz1 Nałogowiec (35,880 p.)

@Aleksandra01, na górze programu wpisz 

#define eng float

A klasy są teraz zamknięte z powodu koronawirusa. 

3 odpowiedzi

0 głosów
odpowiedź 17 marca 2020 przez dawid2002 Mądrala (5,190 p.)
Skoro chcesz za pomocą jakieś klasy przekształcić wartość double na float, to najprościej byłoby zrobić w tej klasie "eng" statyczną metodę, która jako parametr przyjmuje wartość double, a zwraca tą samą wartość ale w postaci float'a. Wywołujesz tą statyczną metodę z odpowiednim argumentem i ona zwraca float'a twojej zmiennej.

Jeśli tobie te rozwiązanie nie odpowiada i chcesz aby twoja podana linijka kodu działała to możesz w tej klasie stworzyć konstruktor z jednym parametrem typu double i zapisać tę wartość w polu tej klasy. Dzięki temu operacja rzutowania z double na obiekt klasy "eng" się powiedzie. Taki konstruktor jest nazywany konstruktorem konwertującym (poczytaj sobie o nim to zrozumiesz jak to wszystko działa). Następnie stwórz w klasie operator konwersji na typ float (również jak nie znasz operatora konwersji to też o nim poczytaj). Który przekonwertuje podaną wartość double, zapisaną w polu klasy na float.

PS.

W C++ stosujemy raczej static_cast zamiast rzutowania w stylu C
komentarz 17 marca 2020 przez tkz Nałogowiec (42,000 p.)

Należy zdefiniować klasę pozwalającą na używanie w kodzie ang. i pol. zapisu liczb dziesietnych (polski zapis to druga część której tu nie podaje) tzn. przy użyciu kropki (lub przecinka)

0 głosów
odpowiedź 17 marca 2020 przez jankustosz1 Nałogowiec (35,880 p.)

Zażartowałem sobie w komentarzu, ale całkiem możliwe, że chodziło o co innego niż klasę.

Obstawiam, że chodziło o to:

typedef float eng;

 

komentarz 17 marca 2020 przez tkz Nałogowiec (42,000 p.)
Spróbuj wywołać to dla liczby "3,4", pamiętaj o przecinku.
komentarz 17 marca 2020 przez jankustosz1 Nałogowiec (35,880 p.)
Czemu przecinek? Przecież autor pytania użył kropki
komentarz 17 marca 2020 przez jankustosz1 Nałogowiec (35,880 p.)
A dobra, teraz doczytałem komentarze.
0 głosów
odpowiedź 17 marca 2020 przez j23 Mędrzec (194,920 p.)
edycja 17 marca 2020 przez j23
struct pol {
    int a_, b_;    

    pol(int a) 
    : a_(a) {}

    operator float () const { return /* tu pomyśl */ ; }
    friend pol operator, (pol obj, int b) { obj.b_ = b; return obj; }
};

 

Podobne pytania

0 głosów
0 odpowiedzi 95 wizyt
pytanie zadane 5 stycznia 2023 w C i C++ przez dextermorgan Nowicjusz (120 p.)
0 głosów
1 odpowiedź 218 wizyt
pytanie zadane 27 listopada 2022 w C i C++ przez benny13 Obywatel (1,150 p.)
0 głosów
1 odpowiedź 200 wizyt
pytanie zadane 8 stycznia 2021 w C i C++ przez Eriss69 Gaduła (4,470 p.)

92,452 zapytań

141,262 odpowiedzi

319,077 komentarzy

61,854 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.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...