Przeciążanie funkcji - z main do odpowiedniej funkcji.

Odpowiedz Nowy wątek
2013-10-06 16:18
0

Witam

Jaki kod wpisać w main przy przeciążaniu funkcji aby przeszedł do odpowiedniej funkcji wypełniania tablicy tj. mam 2 funkcje o tej samej nazwie tyle ze jedna wprowadza wartości int, a druga double?

Z góry dzięki za pomoc.

Pozostało 580 znaków

2013-10-06 16:34
0

Popraw temat, skonkretyzuj problem, jak nazywają się te funkcje.

W main musisz je tylko wywołać:

void WypelnijTablice(int* Tablica)
{
   //Bardzo skomplikowany kod
}
void WypelnijTablice(double* Tablica)
{
   //Bardzo skomplikowany kod
}

int main()
{
   double  Tablica1[100];
   int       Tablica2[100];

   WypelnijTablice(Tablica1);   //Wywoła pierwszą funkcje
   WypelnijTablice(Tablica2);  //Wywoła drugą funkcje.
}

Pozostało 580 znaków

2013-10-07 08:36
0

No tak i teraz aby przejść do konkretnej funkcji rozumiem, że w main trzeba wpisać jakiś kod sterujący np.
if jeżeli chcesz wprowadzać wartości double then wybierz 1
else if jeżeli chcesz wprowadzać wartości int wybierz 2.
No bo skoro

tablica[i]=wprowadzanaWartość;

znajduje się w funkcji WypelnijTablice to zanim zacznie się wprowadzać wartości trzeba wybrać jakąś funcję, tak myślę, no bo jak inaczej?

to po co pytasz skoro wiesz? o_O - Shalom 2013-10-07 10:23
Pytam bo może jest inny sposób. Tak myślałem, czy można napisać taki kod aby w mainie wprowadzić np. 3.14 i wtedy dopiero wejść do funkcji double i dalej wypełniać tablicę. Ale nie wiem czy tak można. - youlian 2013-10-07 14:53
No ale zmienna do której wczytujesz wartość musi mieć jakiś typ przecież... - Shalom 2013-10-07 15:01
No tak. Czyli wszystko jasne. THNX - youlian 2013-10-07 15:04

Pozostało 580 znaków

2013-10-07 17:31
witold
0

Można też wczytać wartość do stringa i wywołać odpowiednią funkcję na podstawie jego zawartości. Np. tak:

std::string text_value;
std::cin >> text_value;
try {
  moja_funkcja( boost::lexical_cast<int>(text_value) );
} catch(boost::bad_lexical_cast&) {
  moja_funkcja( boost::lexical_cast<double>(text_value) );
}
Sypać nowicjuszowi boostem?! Oo - Ola Nordmann 2013-10-07 19:31
Za to powinni ucinać ręce. - Endrju 2013-10-07 22:25

Pozostało 580 znaków

2013-10-07 22:24
0

@witold srsly? sterowanie przepływem za pomocą wyjątków? Takie coś wolno stosować tylko (!) jeśli akcja dla inta wykonuje się w 99 na 100 przypadków i robisz to w ramach optymalizacji. A nawet wtedy jest to malo eleganckie...


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

2013-10-08 16:59
witold
0

A co polecilibycie nowicjuszowi zamiast lexical_cast? Psujące kontrolę typów sscanf, czy może stringstream? Ja nie znam nic prostszego.

Co do sterowania przepływem z wykorzystaniem wyjątków, to oczywiście jest to nieeleganckie, ale wydaje mi się, że jest to stosunkowo niewielką ceną za możliwość użycia gotowej biblioteki zamiast implementacji czegoś samemu.

Pozostało 580 znaków

2013-10-08 19:02
0

Zwykły cin>> zwróci błąd jak spróbujesz wczytać doubla do inta i można wtedy zrobić cin.clear() i czytać do doubla, nie trzeba cudów na kiju robić ;) Rzucanie wyjątków powoduje spory narzut czasowy i jeśli to nie jest "sytuacja wyjątkowa" tylko co drugie wywołanie to znacznie lepiej zrobić ifa.
Głupio gadam ;] Raz że jednak nie zwróci błędu bo wczyta tylko kawałek, a dwa że to i tak byłoby rzucenie wyjątku ;]


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...
edytowany 1x, ostatnio: Shalom, 2013-10-08 19:59
Pokaż pozostałe 4 komentarze
http://www.cplusplus.com/refe[...]tream/istream/operator%3E%3E/ zjedź sobie na sam dół ;) Przy czym żebyśmy sie dobrze rozumieli: sam operator nie rzuca wyjątku, ale "wykrycie" przez niego błędnego wejścia jest wykonane za pomocą rzucenia wyjątku ergo nie ma tu żadnego "zysku" jeśli chodzi i czas wykonania. - Shalom 2013-10-08 21:56
Ok, rozumiem o co ci biega, tylko że jak uważnie zobaczysz przykład który podałem to zauważysz że żaden failbit nie jest wystawiony, wczytało bez żadnych problemów. - _13th_Dragon 2013-10-08 22:17
Ach to wiem, dlatego skreśliłem i napisalem żebym głupi ;] Nie wiem czemu ubzdurałem sobie że to zadziała tak jakbyś próbował wczytać do inta/doubla jakieś literki na przykład ;] - Shalom 2013-10-08 22:20
A no z literkami to coś innego, a od ", a dwa ..." nadal trzeba skasować. ;P - _13th_Dragon 2013-10-08 22:35
To był skrót myslowy :P Chodziło mi o to że gdyby nawet to tak działało to i tak wiązałoby się z rzucaniem wyjątku, ergo nie ma sensu. - Shalom 2013-10-08 22:37

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0