PDA

View Full Version : یک سوال در مورد سازنده ها



mustafa shujaee
شنبه 23 آبان 1388, 16:17 عصر
سلام خدمت اساتید محترم

پاراگراف زیر را که می خوانید در مورد سازنده ها در C++ است.

سازنده پیش فرض که برای مقداردهی اولیه ایجاد می شود به داده های عضو کلاس مقداراولیه نمی دهد ولی برای هرداده عضوی که شیئی از کلاس دیگر است (و هیچ مقداردهی ای توسط برنامه نویس نشده) سازنده پیش فرض را احضار می کند.

سوال:
آیا داده هایی که تعریف می کنیم (متغیر) مثلاً متغیر name در زیر

string name;

- مثل شیئی که از یک کلاس ایجاد می کنیم - آیا داده ی name شیئی از کلاس string می باشد؟
اگر چنین است پس
من برداشتی که از متن بالا در مورد سازنده ها کرده ام این است که وقتی متغیر name یک داده ی عضو از کلاسی است که ما تعریف کرده ایم و به صورت صریح توسط ما مقدار دهی نشده است توسط سازنده پیش فرض کلاس ما به صورت ضمنی سازنده ی پیش فرض در این شیء(داده ی name) از کلاس string را احضار می کند و توسط آن داده ی name مقدار دهی (تهی) می شود.
آیا برداشت من درست می باشد؟
با تشکر

tdkhakpur
شنبه 23 آبان 1388, 21:47 عصر
اول اينكه سازنده اي از كلاس باعث ساخته شدن يك متغير از يك كلاس نميشود و شما بايد بنا به نياز هاي نرم افزار بصورت تحميلي اين خواسته را از سازنده بخواهيد.
دوما اينكه هر متغيير كه داخل كلاس تعريف ميشود فقط متغيير بوده و تنها ارتباط آن با كلاس عضويت ان هست كه بطور منطقي باعث كنترل اين متغيير توسط كلاس ميشود كه به نوبه خود جزو قرار داد هاي كلاس هست. يعني اينكه پروتكل تعريف در كلاس به اين شكل طراحي شده است كه كامپايلر داخل برنامه به همراه كلاس كدهاي اضافي را براي كنترل اعضاي كلاس در نظر ميگيرد.

mustafa shujaee
سه شنبه 26 آبان 1388, 13:29 عصر
با تشکر از جوابتون
ولی من نگفتم که یک سازنده باعث ساختن یک متغیر از کلاس می شود :متفکر:اصلاً یک سازنده وظیفه مقدار دهی به متغیر های تعریف شده در کلاس رادارد. بعد اینکه اگر به صورت تحمیلی از نرم افزار نخواهیم این کار را انجام دهد خود کامپایلر یک سازنده پیش فرض تعریف می کند. چون توی کتابی خونده بودم که سازنده پیش فرض (سازنده ای که توسط کامپایلر به صورت ضمنی تعریف شده یا سازنده ای که توسط برنامه نویس تعریف شده ولی هیچ پارامتری ندار(هیچ آرگومانی از سوی کد مشتری دریافت نمی کن)) سازنده پیش فرض را برای تمام داده های عضو کلاس(متغیر هایی که در درون کلاس تعریف شده اند) احضار می کند. من فکر کردم متغیر هایی مثل string و integer اشیایئی هستند که از کلاس های استاندارد C++ ایجاد شده و شیئی از کلاس دیگر هستند پس حالا که توسط ما مقدار نگرفته اند کامپایلر C++ سازنده پیش فرضی که در درون کلاس مثلاً string (کلاس استاندارد) تعریف شده را احضار می کند که باعث گرفتن یک مقدار تهی توسط این سازنده می شود یا مقدار 0 برای متغیر های از نوع int و....

سوالم را که درباره شیء بودن متغیری مثل name1 از نوع string پرسیده بودم باید بگم که جواب سوالم را گرفتم . یعنی متغیر هایی که تعریف می کنیم مثلاً همین متغیر name همه شیئی هست از کلاسی که تعریف شده. مثلاً متغیر name شیئی از کلاس string است. :لبخندساده:
باز هم متشکرم

m.soleimani
سه شنبه 26 آبان 1388, 14:09 عصر
سلام خدمت اساتید محترم

پاراگراف زیر را که می خوانید در مورد سازنده ها در C++‎‎ است.

سازنده پیش فرض که برای مقداردهی اولیه ایجاد می شود به داده های عضو کلاس مقداراولیه نمی دهد ولی برای هرداده عضوی که شیئی از کلاس دیگر است (و هیچ مقداردهی ای توسط برنامه نویس نشده) سازنده پیش فرض را احضار می کند.

سوال:
آیا داده هایی که تعریف می کنیم (متغیر) مثلاً متغیر name در زیر

string name;

- مثل شیئی که از یک کلاس ایجاد می کنیم - آیا داده ی name شیئی از کلاس string می باشد؟
اگر چنین است پس
من برداشتی که از متن بالا در مورد سازنده ها کرده ام این است که وقتی متغیر name یک داده ی عضو از کلاسی است که ما تعریف کرده ایم و به صورت صریح توسط ما مقدار دهی نشده است توسط سازنده پیش فرض کلاس ما به صورت ضمنی سازنده ی پیش فرض در این شیء(داده ی name) از کلاس string را احضار می کند و توسط آن داده ی name مقدار دهی (تهی) می شود.
آیا برداشت من درست می باشد؟
با تشکر




ببین وقتی شما یه متغیر تعریف می‌کنی کامپایلر با روش‌های مخصوص به خودش می‌یاد و به اون یه مقدار اولیه می‌ده برای مثال تعریف یه متغیر از نوع int باعث می‌شه که کامپایلر کدی را که برای مقدار دهی و شناسایی چیزی که الان وجود داره فراخوانی کنه, پس تا چیزی وجود نداشته باشه مقدار دهی هم نمی‌شه به مثال بالا دقت کن هیچ کامپایلری نمی‌یاد برای متغیر int به نام i برای مثال که دستور ساخته شدنش صادر نشده حافظه بگیره درسته خب این در مورد کلاس هم صدق می‌کنه و محتویات یه کلاس حالا به هر جا اشاره داشته باشن یا هر موجودیت خاصی باشن تا زمانی که سازنده اون کلاس فراخوانی نشه وجود خارجی ندارن و برای همین مقدار دهی نمی‌شن. موفق باشی