ورود

View Full Version : سوال: در مورد وراثت



pooooneh
دوشنبه 09 دی 1387, 08:50 صبح
سلام
اگه يه متغيير public ) static ) در كلاس پايه داشته باشيم، ميتونيم از اين متغيير در كلاس هاي مشتق استفاده كنيم؟
لطفاْ اگه كسي مي دونه به من جواب بده.

Saeed_m_Farid
دوشنبه 09 دی 1387, 10:23 صبح
سلام
اگه يه متغيير public ) static ) در كلاس پايه داشته باشيم، ميتونيم از اين متغيير در كلاس هاي مشتق استفاده كنيم؟
لطفاْ اگه كسي مي دونه به من جواب بده.
سلام
منظورت از استفاده چیه؟ شما به ازاء تمام کلاسهای مشتق شده فقط یک متغیر از این نوع دارید؛ بعبارت دیگه انگار شما یه متغیر global تعریف کردین که نیازی به درست کردن instance از اون کلاس نیست تا به اون دستیابی داشته باشین.
تو تعریف عضو static باید به موارد زیر دقت کنید:

* A static member function can access only static member data, static member functions and data and functions outside the class. A non-static member function can access all of the above including the static data member.
* A static member function can be called, even when a class is not instantiated, a non-static member function can be called only after instantiating the class as an object.
* A static member function cannot be declared virtual, whereas a non-static member functions can be declared as virtual
* A static member function cannot have access to the 'this' pointer of the class

امیدوارم منظورتون رو درست متوجه شده باشم ...

Saeed_m_Farid
دوشنبه 09 دی 1387, 10:31 صبح
اگه این درس رو یه نگاهی بکنید متوجه میشید که درصورت استفاده نادرست چقدر کار با اعضاء استاتیک میتونه مشکل ساز باشه، چون محدوده کلاس واسه اینجور اعضاء بی معنیه!
Static Members of a Class (http://www.functionx.com/cppcli/classes/Lesson12b.htm)
در ضمن اون public که تو پرانتز گذاشتین معنیش چیه؟

cups_of_java
دوشنبه 09 دی 1387, 22:40 عصر
بله می تونین. متغیر های public برای همه قابل دید هستن. (فرزندان هم پس می تونن ببیننش)

ضمنن همون طور که دوستمون گفت متغیر های public static مثل متغیر های سراسری می مونند و استفاده ازشون اصلن توصیه نمی شه.

emad_67
دوشنبه 09 دی 1387, 23:08 عصر
ضمنن همون طور که دوستمون گفت متغیر های public static مثل متغیر های سراسری می مونند و استفاده ازشون اصلن توصیه نمی شه.
در مواردی میتونن کارایی زیادی داشته باشن. کجا گفته شده که استفاده از اونا اصلا توصیه نمیشه؟

pooooneh
سه شنبه 10 دی 1387, 17:03 عصر
مرسي از همه مشكلم حل شد:لبخندساده:

cups_of_java
سه شنبه 10 دی 1387, 21:40 عصر
در مواردی میتونن کارایی زیادی داشته باشن. کجا گفته شده که استفاده از اونا اصلا توصیه نمیشه؟

موارد اندکی هست که جز تعریف متغیر استاتیک راه بهتری نیست. اما به طور کلی خیلی جاها تفکر غلط برنامه نویسی باعث می شه ما ازشون استفاده کنیم. در حالی که راه بهتری می بوده.
از دید شی گرایی متغیر های استاتیک اصلن توصیه نمی شن چون Encapsulation رو زیر سوال می برند و به طور کلی بر خلاف مفاهیم شی گرایی هستن.
شما تو هر کتاب معتبر شیگرایی (مثل کتابهای Bruce Eckel یا حتی Ditiel که بگردی این مطلب رو پیدا می کنی.
موجودیت های static (چه متغیر چه تابع) ناشی از افکار اشتباه و غیر شی گرای برنامه نویس هستند. مگر در مواری معدود که استفاده ازشون محدود شده و مشخص باشه!

Saeed_m_Farid
سه شنبه 10 دی 1387, 22:51 عصر
موجودیت های static (چه متغیر چه تابع) ناشی از افکار اشتباه و غیر شی گرای برنامه نویس هستند.
با سلام:
جناب cups_of_java؛ با درنظر گرفتن نام شما احتمالا شما جاواكار هستين و با اين ديد دارين موضوع رو نگاه ميكنيد ولي تو سي نبايد اينقدر راحت بگين افكار اشتباه! چون بعضي چيزا اينجا با دنياي واقعي تناقض داره و نميشه بقول شما افكار كاملا شي گرا داشت. مثلا همين تابع main جاوا يه تابع استاتيكه و اگه اين امكان نبود جاواكارها بايد با چه مصيبتي از كلاس والد instance ميساختن و ...

واقعيتش بنظر من اساتيد بزرگ سي خالقان زبانهاي شي گرا و پياده ساز اين منطق برنامه نويسي خيلي محبوب و كارآمد هستند و ما داريم از دستاوردهاي اونا استفاده ميكنيم؛ ولي چون هيچ نظريه يا ديدگاهي در هيچ علمي وحي منزل نيست! (كه منطق شي گرايي هم شامل اين موضوع ميشه) يه برنامه نويس (يا دركل جوياي علم) نبايد خودش رو محدود به يه ديدگاه و منطق خاص بكنه چون همونطوركه برنامه نويسي ساختار يافته جاش رو به شي گرايي داد (نه بطوركامل) ممكنه اين منطق هم عمر محدودي داشته باشه...

از طرفي خود جاوا واسه اكثر (نميتونم بگم همش چون مطمئن نيستم) متغيراش thread Safety گذاشته (تا اونجايي كه من ميدونم مثلا تو متغيرايي كه تو نت بينز تعريف ميكردم wait. و ... ميتونستم بذارم) ، واسه چي؟ چون خيلي از مواقع لازم ميشه شما يه متغير Global تعريف كنين كه چندين thread دارن ازش استفاده ميكنن. يا مثلا %system% يا %temp% ويندوز؟ از اينا global‌ تر ما چيزي داريم؟ نگيم چون مايكوسافته نميفهمه؟! واقعيتش داره اينهمه resource رو هندل ميكنه و وقفه ها رو مديريت ميكنه و 1000 تا مصيبت ديگه! شما يه برنامه مينويسي از يه طرف با سخت افزار كار ميكنه از طرف ديگه با tread‌هاي كاربرا و يه كوچولو هم با وب و شبكه تراكنش داره ببين 10 ساعت ديگه وضعيت virtual memory ات چي ميشه؟

اساتيد محترم ببخشن يه مقدار بيربط گفتم ولي خوب ديگه ...
با تشكر