Witam moi drodzy,
mam dość banalne pytanie sięgające tym razem fundamentów, a dotyczy ono poniższego zadania:
Dokonaj implementacji klasy Cyfra służącej do reprezentacji cyfry.
ma dysponować konstruktorem parametrycznym przyjmującym cyfrę(wartość liczbowa)
jako parametr, przy czym niepoprawne wartości mają być automatyczne sprowadzane do najbliższej poprawnej
-
Zastanawiam się jak poprawnie wykonać to zadanie. Mogę definiować dla każdego typu fundamentalnego konstruktor, który robi dokładnie to samo zaokrągla liczbę. Później okazało się ze jak mam 3 konstruktory parametryczne przyjmujące, int, float double, i nagle stworze zmienna long double to kompilator głupieje bo nie ma takiego konstruktora, a on sam nie wie którego z pozostałych trzech ma użyć. wiec później pomyślałem, aby po prostu stworzyć jeden konstruktor z parametrem o najwyższej precyzji double long i jakikolwiek typ nie podam, zostanie wykorzystany tylko ten jeden konstruktor który przyjmuje parametr fundamentalny. Czy to podejście jest poprawne ? Zachodzi to zawsze konwersja do double long, ale za to kodu jest mniej.
-
Jak to ogólnie jest, ze kompilator widząc jeden konstruktor potrafi wykorzystać go dla typów fundamentalnych? Zachodzi tu jakiś proces dziedziczenia?
class Cyfra
{
int cyferka;
public:
Cyfra() {}; // konstruktor domyslny
//Cyfra(int c) { cyferka = c; }; // konstruktor z parametrem
//Cyfra(float rzeczywista) { cyferka = nearbyint(rzeczywista); };
//Cyfra(double rzeczywista) { cyferka = nearbyint(rzeczywista); };
Cyfra(double long rzeczywista) { cyferka = nearbyint(rzeczywista); };
int pobierz_cyferka() { return cyferka; }
};
void main()
{
double long a = 2.6;
Cyfra cyferka = Cyfra(a);
cout << cyferka.pobierz_cyferka();
cout << endl;
system("pause");
}
Pozdrawiam ;).