matematykaszkolna.pl
Konstruktory Benny: O co chodzi z konstruktorami? Czym różni się: zespolona::zespolona() { } _____________________ zespolona::zespolona(float x, float y) { re=x; im=y; } __________________________________ zespolona::zespolona() { re=0; im=0; }
4 sty 16:34
jc: zespolona z; // wykona się druga funkcja powstanie zmienna z re=im=0. zespolona z(2,7); // wykona się pierwsza funkcja, powstanie zmienna z re=2, im=7. C++ jest trochę niekonsekwentny i niestety w pierwszym przypadku nie możemy napisać z().
4 sty 16:43
Benny: No, a co z przypadkiem, gdy zapiszemy zespolona::zespolona() { }
4 sty 16:47
JJ: Jest to konstruktor domyślny, który jest automatycznie generowany przez kompilator gdy nie ma on innych konstruktorów i jest wywoływany podczas tworzenia obiektu.
4 sty 17:06
Benny: Jakie jest jego działanie w programie?
4 sty 17:07
Dziadek Mróz: Przeciążanie konstruktorów Zespolona() − konstruktor domyślny Zespolona(int re, int im) − konstruktor przeciążony dwuargumentowy przeciążanie − tworzenie funkcji/klas dla wielu rodzajów zmiennych
4 sty 17:13
Benny: Nie bardzo rozumiem to przeciążanie.
4 sty 17:28
JJ: Masz dwie metody (tutaj konstruktory) o takiej samej nazwie jednak przyjmujące różne argumenty. W zależności od tego co podasz (lub też nie) do tej przeciążonej metody/konstruktora to zostanie wywołana ta metoda/konstruktor która przyjmuje argumenty o takich typach jakie jej przesyłasz. Spróbuj napisać program, w którym masz dwie metody o takiej samej nazwie i przyjmującej takie same argumenty (lub nie przyjmujące żadnych) i sprawdź co się stanie przy próbie uruchomienia.
4 sty 17:38
Benny: #include<iostream> using namespace std; class zespolona { private: float im,re; public: zespolona(); }; zespolona::zespolona() { re=0; im=0; } zespolona::zespolona() { re=0; im=0; } main() { system("pause"); } O to Ci chodzi?
4 sty 18:01
Dziadek Mróz: Inaczej, bo bijesz do OOP a nie znasz podstaw przeciążania. void wypisz() { std::cout << "Funkcja wypisz bezargumentowa"; } void wypisz(int dana) { std::cout << "Funkcja wypisz jednoargumentowa dla int " << data; } void wypisz(float dana) { std::cout << "Funkcja wypisz jednoargumentowa dla float " << data; } ... main: wypisz(); // wywoła wypisz() wypisz(3); // wywoła wypisz(int) wypisz(3.14); // wywoła wypisz(float) W C takiego czegoś jak przeciążanie nie istnieje więc pisałbyś tak: void wypisz() { std::cout << "Funkcja wypisz bezargumentowa"; } void iwypisz(int dana) { std::cout << "Funkcja wypisz jednoargumentowa dla int " << data; } void fwypisz(float dana) { std::cout << "Funkcja wypisz jednoargumentowa dla float " << data; }
4 sty 22:44
bezendu: dziadek javę znasz może ?
4 sty 23:16
Dziadek Mróz: Z lekka a co tam masz?
5 sty 00:02
Benny: Ok, trochę się rozjaśniło emotka
5 sty 00:09