Selam;
Ben C++'da şöyle bir kod yazdım:
class Counter
{
private:
int count;
public:
Counter() : count(0)
{
}
Counter(int count) : count(count)
{
}
int to_int() const
{
return count;
}
void print() const
{
cout << count << endl;
}
};
void do_stuff(Counter counter)
{
int c = counter.to_int();
cout << "c = " << c << endl;
}
int main()
{
Counter c0(7);
c0.print();
do_stuff(17);
return 0;
}
Bu kodda explicit anahtar kelimesini kullanmadığım için parametreyi ve do_stuff fonksiyonunu kandırabiliyorum.
do_stuff fonksiyonuna argüman olarak direk 17 geçiriyorum ve program çalışıyor. Bunu explicit ile engelleyebilirim, fakat explicit de kullanmadan koda şu kurucu fonksiyonu yazdığımda:
class Counter
{
..
Counter(Counter& count) : count(count.count)
{
}
..
};
do_stuff fonksiyonunu kandıramıyorum. Artık do_stuff(17) çalışmıyor. Benim anlamadığım nokta ise int parametre alan Counter kurucu fonksiyonu varken neden alakasız bir kurucu fonksiyon ile explicit koymadan hata veriyor?
Ama bu kurucu fonksiyonun parametresini 'const Counter& count' olarak değiştirdiğimde yine program kanarak çalışıyor. Bu kurucu fonksiyon nasıl etkiliyor bu do_stuff'ı?
Teşekkürler!
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]