matematykaszkolna.pl
c++ frustracja: C++ Przeciążanie funkcji Czy w tym wypadku przeciążanie działa tak jak powinno? Jak wywołać funkcje które mają taką samą nazwę i zestaw argumentów?(w ogóle jest to możliwe?) #include <iostream> using namespace std; int pole (int); float pole (float); int pole (int, int); int main() { int wybor,iwynik; float fwynik; cout << "Jakie pole chcesz policzyc? \n 1.kwadrat \n 2.kolo \n 3.prostakat" << endl; cin >> wybor; switch(wybor) { case 1: int bok; cout << "Podaj dlugosc boku: "; cin >> bok; iwynik = pole(bok); cout << iwynik; break; case 2: float promien; cout << "Podaj promien okregu: "; cin >> promien; fwynik = pole(promien); cout << fwynik; break; case 3: int a,b; cout << "Podaj pierwszy bok: "; cin >> a; cout << "Podaj drugi bok: "; cin >> b; iwynik = pole(a,b); cout << iwynik; break; default: cout << "Nie ma takiej opcji"; } return 0; } int pole (int bok) { return bok*bok; } float pole (float promien) { return 3.14 * promien * promien; } int pole(int a, int b) { return a*b; }
11 gru 22:29
Dziadek Mróz: Jak wywołać funkcje które mają taką samą nazwę i zestaw argumentów?(w ogóle jest to możliwe?) To właśnie wyróżnia C++ od C. Masz dwie funkcje o tej samej nazwie, a każda robi co innego. Kompilator najpierw sprawdza jakiego typu zmienne są przekazywane do funkcji a później porównuje je z listą dostępnych funkcji. To tak jak chowanie wypranych majtek do szuflady w komodzie. Wiesz że szukasz szuflady z majtkami, więc otwierasz szuflady, porównujesz wyprane majtki do skarpetek, koszulek i majtek, chowasz majtki. Masz trzy szuflady, tej samej długości i koloru, a każda przechowuje (robi) co innego. Łapiesz?
11 gru 22:59
Dziadek Mróz: Użyj debugowania tekstowego: #include <iostream> int pole(int); float pole(float); int pole(int, int); int main() { int wybor, iwynik; float fwynik; std::cout << "Jakie pole chcesz policzyc? \n 1.kwadrat \n 2.kolo \n 3.prostakat" << std::endl; std::cin >> wybor; switch (wybor) { case 1: int bok; std::cout << "Podaj dlugosc boku: "; std::cin >> bok; iwynik = pole(bok); std::cout << iwynik; break; case 2: float promien; std::cout << "Podaj promien okregu: "; std::cin >> promien; fwynik = pole(promien); std::cout << fwynik; break; case 3: int a,b; std::cout << "Podaj pierwszy bok: "; std::cin >> a; std::cout << "Podaj drugi bok: "; std::cin >> b; iwynik = pole(a,b); std::cout << iwynik; break; default: std::cout << "Nie ma takiej opcji"; } return 0; } int pole(int bok) { std::cout << "pole(int)\n"; return bok*bok; } float pole(float promien) { std::cout << "pole(float)\n"; return 3.14*promien*promien; } int pole(int a, int b) { std::cout << "pole(int, int)\n"; return a*b; }
11 gru 23:00