عملگر explicit برای تابع سازنده
هنگامی که تابع سازنده ی یک کلاس را با یک آرگومان تعریف می کنید، کامپایلر از این تابع برای یک تبدیل صریح (explicit) استفاده کند. حالا این یعنی چه ؟ کلاس زیر را در نظر بگیرید :
class Sample
{
public:
Sample (int a) : num (a)
{
cout << num << endl;
}
private :
int num
}
کد بالا یک کلاس ساده با یک متغیر عضو و یک تابع سازنده را ایجاد می کند که وظیفه اش مقدار دهی به این متغیر عضو و نمایش آن در خروجی است. حالا برای استفاده از این تابع کد زیر را در نظر بگیرید :
// main
Sample a = 100;
با این کد یک شی از کلاس Sample به نام a تعریف کرده ایم و با استفاده از تابع سازنده مقدار 100 را به متغیر عضو کلاس اختصاص داده ایم. اتفاقی که در اینجا پیش می آید این است که کامپایلر مقدار 100 را به طور خودکار از نوع int به نوع کلاس Sample تبدیل می کند. البته در بسیاری مواقع از جمله در این مثال هیچ مشکلی برای برنامه ما پیش نمی آید ولی شاید بخواهید که از این کار جلوگیری کنید. برای این کار میتوانید مانند زیر از کلمه ی کلیدی explicit در قبل از نام تابع استفاده کنید :
class Sample
{
public :
explicit Sample (int a) num (a)
{
cout << num << endl;
}
private :
int num;
}
با استفاده از عملگر explicit دیگر نمیتوان تابع سازنده را مانند بالا استفاده کرد و به جای آن میتوانیم آن را به صورت زیر به کار ببریم :
// main
Sample a (100);
البته شیوه ی اصولی استفاده از تابع سازنده نیز این چنین است ولی در کل بایستی با اصول و قوائد یک زبان برنامه نویسی آشنا بود و هدف ما هم در این جا مباحث آموزشی است.
البته در نظر داشته باشید که اگر تابع سازنده ی شما دارای بیش از یک آرگومان باشد ولی آرگومان های شما دارای مقادیر پیشفرض باشند نیز ممکن است اتفاقی مشابه بالا برای تابع سازنده رخ دهد و استفاده از تابع سازنده به شیوه ی اول نیز ممکن باشد. هرچند که با استفاده از عملگر explicit میتوان از بروز چنین تبدیل هایی جلوگیری کرد و در بسیاری از مواقع نیز این تبدیل های مشکلی به برنامه وارد نمی کنند.
ivor horton's "beginning visual c++ 2010"
+ نوشته شده در سه شنبه شانزدهم اسفند ۱۳۹۰ ساعت 20:43 توسط MEC
|
GENERAL INFORMATION