Cześć!
Może mi ktoś wytłumaczyć o co chodzi z funkcją konwersji typu argumentu na typ klasy??
Przykładowo Stone(double lt); oznacza konwersje double na Stone - i właśnie mi chodzi o to, że nie rozumiem co będzie teraz z lt? czy będzie obiektem czy jak?
To jest konstruktor - it to zwykły argument. (żadna konwersja)
it jest zwykłym argumentem tego konstruktora, po pracy konstruktora zostanie on usunięty. Konwersja polega na tym, że kompilator dopasowuje konstruktor do tego, co podstawisz.
Dany konstruktor jest odpalany i potem na podstawie argumentu pracuje.
Każdy konstruktor z jednym argumentem jeżeli nie jest poprzedzony klauzulą explicit
może zostać użyty przez kompilator do konwersji niejawnej.
#include <iostream>
using namespace std;
struct Stone
{
Stone(double x) { cout<<"Konstruktor "<<x<<endl; }
};
void fun(Stone s)
{
cout<<"Funkcja"<<endl;
}
int main()
{
fun(3.3); // tu nastąpi konwersja niejawna z double na Stone
return 0;
}
Właśnie o to mi chodzi. Co oznacza, że double jest konwertowane na Stone? Że zostanie wywołany konstruktor Stone z parametrem, który został podany w funkcji fun?
Tak. Zostanie wywołany konstruktor z argumentem double
.
Tak ale konwersja niejawna zachodzi tylko w pewnych określonych sytuacjach, zgodnie z określoną hierarchią i tylko jeśli nie ma słowa explicit.