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
5 sty 00:09