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

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.

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.
}
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?

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) );
}
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...

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.

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 ;]

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