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

Klasa 'konwertujaca'

0 głosów
116 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.)
wywołanie dla polskiego zapisu:

const float numPol = ((pol)3,4)
1
komentarz 17 marca 2020 przez tkz Nałogowiec (41,840 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 (41,840 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 (30,200 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,170 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 (41,840 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 (30,200 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 (41,840 p.)
Spróbuj wywołać to dla liczby "3,4", pamiętaj o przecinku.
komentarz 17 marca 2020 przez jankustosz1 Nałogowiec (30,200 p.)
Czemu przecinek? Przecież autor pytania użył kropki
komentarz 17 marca 2020 przez jankustosz1 Nałogowiec (30,200 p.)
A dobra, teraz doczytałem komentarze.
0 głosów
odpowiedź 17 marca 2020 przez j23 Mędrzec (169,680 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
1 odpowiedź 105 wizyt
pytanie zadane 8 stycznia 2021 w C i C++ przez Eriss69 Gaduła (4,050 p.)
0 głosów
1 odpowiedź 67 wizyt
pytanie zadane 23 listopada 2020 w C i C++ przez ResCrove Obywatel (1,700 p.)
0 głosów
0 odpowiedzi 39 wizyt
pytanie zadane 31 lipca 2020 w C i C++ przez Nascisz Nowicjusz (160 p.)

86,541 zapytań

135,291 odpowiedzi

300,649 komentarzy

57,288 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...