obsługa wyjątków

0

Witam ma pytanie co do try catch czy powinny one obsługiwać tylko wyjątki i jak zrobię obsługę błędów to też tak można np. czy dobrze będzie jak w try catch będę sprawdzał czy po stringa wpisałem zamiast liczby to literę.

0

Nie rozumiem pytania.

  • Czy pytasz o to, czy możesz łapać w catch stringi? Zasadniczo możesz wszystkim rzucać i wszystko łapać, ale po co? Lepiej rzucać i łapać tylko wyjątki.

  • Czy pytasz o to, kiedy masz rzucać wyjątki? Wyjątki służą do obsługi błędów... więc pytanie czy należy łapać wyjątki czy należy obsługiwać błędy jest dla mnie niezrozumiałe.

Jeśli chodzi o obsługę błędów wejścia/wyjścia: To już w C++ robi się samo, poczytaj to: http://en.cppreference.com/w/cpp/io/basic_ios/good

Na przykład: http://ideone.com/neHmo5

0

może podam swój kod

void Manage::setWhatMenuOption() noexcept {
    while (true) {
        try {
            std::cin >> whatMenuOption;
            if (whatMenuOption < 1) {
                throw badWhatMenuOptionTooSmall();
                continue;
            }
            if (whatMenuOption > 6) {
                throw  badWhatMenuOptionTooBig();
                continue;
            }
            if (isalpha((char)whatMenuOption)) {
                throw badWhatMenuOptionIsAlpha();
                continue;
            }
            if (whatMenuOption >= 1 && whatMenuOption <= 6) {
                break;
            }
        }
        catch (badWhatMenuOptionTooSmall &ref) {
            ref.message();
        }
        catch (badWhatMenuOptionTooBig &ref) {
            ref.message();
        }
        catch (badWhatMenuOptionIsAlpha &ref) {
            ref.message();
        }
    }
}

Chodzi o to czy tak robią programiści że błędy a nie wyjątki sprawdzają try catch bo jeśli się nie mylę to gdzieś słyszałem że takich rzeczy nie robi się w try catch ale nie wiem czy to prawda?

0

Jeśli Cię dobrze zrozumiałem: wyjątki, jak sama nazwa wskazuje, służą do obsługi sytuacji wyjątkowych. C++ na sensownych systemach (czyli wszystkich popularnych za wyjątkiem 32-bitowego Windowsa) ma je zaimplementowane tak, że koszt nie rzucenia wyjątku jest taki sam, jakby obsługi wyjątków w kodzie wcale nie było. Oznacza to niestety, że koszt obsługi wtedy, gdy jednak ten wyjątek zostanie rzucony, jest dosyć spory.

Tak więc gdy chcesz się zabezpieczyć przed jakimś rzadkim wydarzeniem, to nadadzą się idealnie. Jak chcesz mieć instrukcję przerywającą pętlę, to wybierz coś innego.

0

chodzi to ze w klasie mam metodę set w której ustawiam jakąś wartość i odrazy w metodzie chce sprawdzić czy wartość znajduje się w przedziale od 1 do 6 i czy zrobić to pętlą czy właśnie try catch

0

Tak jak pisałem: jeśli spodziewasz się, że niemal zawsze będzie w tym przedziale, to wyjątkiem. Jeśli nie, to nie.

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