داخل این کد :
char z = 'e';
A w = z;
کامپایلر سعی می کنه z رو به A تبدیل کنه و بعد برابر با w بزاره .
حالا قاعدش به این شکله اگر typecast operator نداشته باشید مناسب ترین سازنده کلاس که بصورت explicit نباشه صدا زده میشه
داخل مثال شما سازنده که char میگیره رو explicit تعریف کردید پس فقط سازنده با int بصورت explicit تعریف نشده پس همون صدا زده میشه .
اگر داخل مثالتون هر 2 تا سازنده رو explicit تعریف کنین برنامه ارور میده .
در مورد
A w(z)
اصلا تبدیل ضمنی صورت نمی گیره پس فرقی نمی کنه که سازنده explicit باشه یا نه ,
پس طبیعتا کد بالا سازنده با char رو صدا میزنه داخل همون پست هم توضیح دادم 3 جا فقط تبدیل ضمنی انجام میشه
B b = a; //tabdil shey class A be B ba seda zadan constructor ya typecast operator
a = b; //Tabdil shey class B be A ba seda zadan copy constructor ya typecast operator
b = a; //Tabdil shey class A be B ba seda zadan copy constructor ya typecast operator