explicit در کلاس - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

explicit در کلاس

+1 امتیاز

سلام دوستان. من کد زیر را با توجه به این پست نوشتم تا بهتر بتوانم متوجه تعریف explicit بشم اما مشکلی که وجود دارد به جای اینکه سازنده کلاس با ورودی char را فراخوانی کند، سازنده با ورودی int را فراخوانی می کند. کسی می تواند بهتر توضیح دهد که اشکال کار در کجاست؟ ممنون

#include <iostream>
#include <conio.h>
using namespace std;

class A
{
	public:
		A(int x)
		{
			cout << "int";
		}
		explicit A(char x)
		{
			cout << "char";
		}
};

int main()
{
	char z = 'e';
	A w = z;
	_getch();
}

 

سوال شده مرداد 1, 1393  بوسیله ی Pashmak (امتیاز 644)   8 15 31
دوباره تگ گذاری شد مهر 9, 1393 بوسیله ی BlueBlade

2 پاسخ

+2 امتیاز
 
بهترین پاسخ

داخل این کد : 

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
پاسخ داده شده مرداد 2, 1393 بوسیله ی BlueBlade (امتیاز 15,315)   15 18 89
انتخاب شد مرداد 3, 1393 بوسیله ی Pashmak
بابت جواب ممنون.
خواهش می کنم .
+2 امتیاز

این جوری بنویس:

A w(z)

 

پاسخ داده شده مرداد 2, 1393 بوسیله ی moh3en (امتیاز 209)   15 28 40
سلام بابت جواب ممنون. اما چرا در حالت تساوی سازنده char صدا زده نمی شود اما در این حالتی که شما نوشتید صدا زده میشه؟
...