اغلب برنامه هاانواع مختلفی از داده ها را پردازش می کنند.بعضی از اعمال با انواع یکسان انجام
میشوند مثلاجمع کردن دو مقدارصحیح یک مقدار صحیح را تولید می کند.اما گاهی لازم است یک
نوع داده به نوع دیگری تبدیل شود....
این کار ممکن است در عبارات محاسباتی یا دستور انتساب انجام شود .اگر انواع جدید (اشیایی از کلاس های مختلف)بخواهند با هم ترکیب شوند در حالت عادی داندکه چگونه تبدیلات بین انواع جدید و انواع جدید و انواع اولیه را انجام دهد.برنامه نویس باید چگونگی این تبدیلات را مشخص کند.این تبدیلات را می توان با سازنده تبدیل انجام داد.این سازنده دارای یک آرگومان است که می توانداشیایی از یک نوع (از جمله انواع اولیه)را به اشیایی از یک کلاس خاص تبدیل کند.عملگر تبدیل می تواند شی ای از یک کلاس را به شی ای از کلاس دیگر و یا شی ای از نوع اولیه تبدیل کند.این عملگر تبدیل باید تابع عضو غیر استاتیک باشد و نمی تواند به عنوان یک تابع دوست تعریف شود.
Test::operator char*()const;
یک تابع تبدیل مجددا تعریف شده را اعلان می کندتا شی char* را خارج از یک شی از نوع
جدیدی به نام test ایجاد کند تابع عملگر تبدیل مجددا تعریف شده نمی تواند نوع برگشتی را مشخص
کند.نوع برگشتی نوع شیئی است که در حال تبدیل است .اگر s یک شی کلاس باشد وقتی کامپایلر
عبارت s (*char)را میبیند فراخوانی s.operator char*() را ایجاد می کند.توابع عملگر تبدیل
می توابع عملگر تبدیل می توانندطوری تعریف شوندکه شیئی از یک کلاس را به انواع اولیه یا
اشیایی از کلاس دیگر تبدیل کنند.الگوهای زیر را در نظر بگیرید:
Test::operator int()const;
Test::operator otherclass().const;
این الگوها توابع عملگر تبدیل مجددا تعریف شده ایی را اعلان می کنند که شی ای از یک نوع کلاس test را به یک مقدار صحیح و یا شی ای از نوع کلاسtest را به شی ای از کلاس other class تبدیل می کنند.یکی از جالب ترین کاربرد عملگرهای تبدیل و سازنده های تبدیل این است که کامپایلر می تواند این توابع را فراخوانی کندت اشیای موقت را ایجاد نماید.به عنوان مثال اگر شی s از نوع کلاس string باشد و در جایی از برنامه ظاهر شود که می بایست یک اشاره گر معمولی char*ظاهر میشد مانند آنچه در زیر آمده است:
Cout<<s;
کامپایلر تابع عملگر تبدیل مجددا تعریف شده operator char *را فراخوانی می کند تا این شی را به char * تبدیل نمایدو نتیجه را در عبارت بکار ببرد.با این عملگر تبدیلی که برای کلاس string فراهم آمده است لازم نیست عملگر >>مجددا تعریف شود تا با استفاده از cout بتواندstring را به خروجی ببرد.
ممنون،خیلی خوب بود.
البته به زبان ++C بود،درسته؟
خواهش میکنم قابلتونو نداشت.آره به زبان ++c بود.:)
خوب بود مرسی
خواهش میکنم....:)