Deklaracje w c++

0

a) f (int i, int j, int K=0); f(int i, int j=0);
b) f (int i, char j); f (int j);
c) f (int i, int j); F(int j);

mam określić czy podana deklaracja jest poprawna czy nie. I powiedzieć dlaczego . Kompletnie się w tym pogubiłem. Proszę o pomoc osoby która się na tym zna .

Proszę nie usuwać tego tematu do kosza. Sprawa bardzo ważna.

1

jak rozumiem chodzi o to czy dwie deklaracje w jednym ponpunkcie są ok?
Jeśli tak to:
a-nie, jak dasz w kodzie f(1,1) to kompilator nie będzie wiedział jaka to funkcja, ponieważ pierwszą funkcję możesz wywołac podając 3 argumenty lub 2 argumenty(za trzeci kompilator weźmie domyślne 0, bo jest K=0), a drugą funkcję możesz analogicznie wywołać podając 1 lub 2 argumenty. Typy zmeinnych są takie same, wiec kompilator przy 2 argumentach się nie połapie.
(Nie wiem czy nie ma odgórnych restrykcji, że funkcji z wartością domyślną nie wolno przeciążać)

b) tak-to są dwie przeciążone funkcje kompilator rozpozna je na podstawie typu i liczby argumentów,

c)jak wyżej, natomiast nie będzie tu przeciążania f i F to dwie różne nazwy, bo w C++ ma znaczenie wielkość znaków/

0

dzięki :). O takie wytłumaczenie mi chodziło :)

0

A treść pytania znasz? Jak mają się do siebie dwie deklaracje podane w każdym z punktów?
Wygląda to tak, że żadna z nich nie jest poprawna, bo żadna nie podaje typu zwracanego. Poza tym ważnym szczegółem każda z osobna jest prawidłowa, wniosek z tego taki, że wyrwałeś pytanie z kontekstu, a bez niego ciężko cokolwiek powiedzieć. Jeżeli to mają być dwie wersje tej samej funkcji (przeciążenie) to poprawna jest odpowiedź b.

edit: Ach, ninja post. :P

0

no właśnie-zasadnicze pytanie: jak brzmiała treść pytania, bo jesli tam było, że te funkcje mają być przeciążone, to w c) one przeciążane nie są.
Na przyszłość radzę przytaczać chociaż w oryginale pytanie,jeśli nie potrafisz (autorze wątku) streścić je własnymi słowami tak, żeby nie wymagało zgadywania.

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