PDA

View Full Version : سوال: کلاس



nokhodi
پنج شنبه 19 دی 1392, 17:40 عصر
توی تعریف کلاس توی کتابی خوندم که بخش اول ( همون جایی که توی قطعه کد زیر a وb رو تعریف کردم) برای داده های خصوصی استفاده میشه...بعدشم پابلیک و دوباره خصوصی یا همون اختصاصی...
اون خصوصی اول با دومی چه فرقی داره؟

چون از نظر تعریفی فرقی باهم ندارن...اما توی کاربرد رو نمیدونم!!!!


class myclass
{
int a;
int b;
public:
.
.
.
private:
int c;

}

کامبیز اسدزاده
پنج شنبه 19 دی 1392, 17:53 عصر
توی تعریف کلاس توی کتابی خوندم که بخش اول ( همون جایی که توی قطعه کد زیر a وb رو تعریف کردم) برای داده های خصوصی استفاده میشه...بعدشم پابلیک و دوباره خصوصی یا همون اختصاصی...
اون خصوصی اول با دومی چه فرقی داره؟

چون از نظر تعریفی فرقی باهم ندارن...اما توی کاربرد رو نمیدونم!!!!


class myclass
{
int a;
int b;
public:
.
.
.
private:
int c;

}

شما وقتی کلاسی ایجاد میکنید میتونید توی اون کلاس متغیر ها و توابع و هرچیزی رو به انواع حالت ها تعریف کنید چه خصوصی / عمومی / محافظت شده و ...



class myclass
{

int a;
int b;

private: int c;
public: int d;
protected: int e;

private: void MyFunc1(){}
public: void MyFunc2(){}

};

nokhodi
پنج شنبه 19 دی 1392, 18:16 عصر
دوست عزیز اینو که شما گفتی منم در جریانش هستم :) منظورم اینه چه فرقی بین دو متغیر a و c هست؟!
چون توی شکل کلی دستور گفته شده که جفتشون اختصاصی برای کلاس هستن
حالا چه فرقی میکنه من اون اول بنویسم یا اینکه بیام پایین تر زیر کلمه private بنویسم؟؟؟!!!

کامبیز اسدزاده
پنج شنبه 19 دی 1392, 18:25 عصر
دوست عزیز اینو که شما گفتی منم در جریانش هستم :) منظورم اینه چه فرقی بین دو متغیر a و c هست؟!
چون توی شکل کلی دستور گفته شده که جفتشون اختصاصی برای کلاس هستن
حالا چه فرقی میکنه من اون اول بنویسم یا اینکه بیام پایین تر زیر کلمه private بنویسم؟؟؟!!!

شما وقتی اون بالا مینویسی int a همون تعریف پیشفرض به صورت اختصاصی برای اون کلاس هست و بعد میای پایین دوباره میگی public : a; خب دوباره کاری کردی و دوباره تبدیلش کردی به عمومی.
در صورتی که هدف تغییرات این چنینی نیست میشه همون اول از نوع public یا private تعریف کرد که دیگه لازم نباشه بیاین چند خط پایینتر دسترسیرو بهشون بدین.

fahimeh1512
پنج شنبه 19 دی 1392, 18:40 عصر
میشه در مورد حفاظت شده و کاربردش توضیح بدین؟

کامبیز اسدزاده
پنج شنبه 19 دی 1392, 18:55 عصر
میشه در مورد حفاظت شده و کاربردش توضیح بدین؟
تعریف از نوع protected یک نوع حالتی بین private و public هستش با این تفاوت که اعضای protected از طریق خود کلاس , کلاس های آشنای آن و کلاس های مشتق شده از آن کلاس قابل دستیابی هستند.
در دسترسی public : دسترسی در تمامی نقاط فایل امکان پذیر است.
دسترسی private : تنها در داخل کلاس های آشنا آن قابل دسترسی هستند.

در کل protected یه نوع سفارشی مانند هستش.

nokhodi
پنج شنبه 19 دی 1392, 19:09 عصر
نه بخدا منظورم این نیست:(
توی عکس زیر دوبار میگه اختصاصی فرق تعریف متغیر اون بالا با اون پایین در چیه؟
یه موقع هایی میاد اون پایین تعریف میکنه میگه این اختصاصیه...بعد یه جاهایی هم اون بالاتعریف میکنه میگه این اختصاصیه

http://www.uploadax.com/images/88176851148538823561.png

کامبیز اسدزاده
پنج شنبه 19 دی 1392, 19:18 عصر
نه بخدا منظورم این نیست:(
توی عکس زیر دوبار میگه اختصاصی فرق تعریف متغیر اون بالا با اون پایین در چیه؟
یه موقع هایی میاد اون پایین تعریف میکنه میگه این اختصاصیه...بعد یه جاهایی هم اون بالاتعریف میکنه میگه این اختصاصیه

http://www.uploadax.com/images/88176851148538823561.png

بهتر بود اولین گزینه رو مینوشت داده ها و توابع برای تعریف به صورت های زیر ! ولی منظورش تمامی تعاریفی هستند که اختصاص داده میشن به کلاس موجود.
شما در این شکی نکنید که یه چیزی اون بالا تعریف کنید و بعد پایین بیایین نوعشو تغییر بدین کامپایلر در نهایت آخرین تغییر و تبدیل رو در نظر خواهد گرفت.

nokhodi
پنج شنبه 19 دی 1392, 20:24 عصر
یه سوال دیگه
برای تعریف کردن و استفاده کردن از کلاس توی کتاب جعفر نژاد قمی توی فصل 7
میاد اول یه فایل هدر مینوسه که کلاس توی اون تعریف شده...بعد یه فایل .cpp دیگه با همون نام در نظر میگه برای پیاده سازی کلاس و در نهایت یک فایل دیگه داره برای بدنه اصلی برنامه

حالا سوال بنده:
چرا فایل دوم رو داخل همون هدر نمیویسه؟
فایل دوم هیچ جایی فراخوانی نشده؟!
دلیل این همه فایل در فایل چیه؟!

omidshaman
پنج شنبه 19 دی 1392, 20:29 عصر
توی تعریف کلاس توی کتابی خوندم که بخش اول ( همون جایی که توی قطعه کد زیر a وb رو تعریف کردم) برای داده های خصوصی استفاده میشه...بعدشم پابلیک و دوباره خصوصی یا همون اختصاصی...
اون خصوصی اول با دومی چه فرقی داره؟

چون از نظر تعریفی فرقی باهم ندارن...اما توی کاربرد رو نمیدونم!!!!


class myclass
{
int a;
int b;
public:
.
.
.
private:
int c;

}

ازنظر کارکرد فرق نمی کنن ولی بهتره private قبل از داده ها بمونه به خاطر خوانایی بیشتر (حالت دوم منظورمه )
در ضمن کتاب جعفر نژاد به درد نمی خوره .

nokhodi
پنج شنبه 19 دی 1392, 20:47 عصر
در ضمن کتاب جعفر نژاد به درد نمی خوره .

کاملا موافقم...یعنی گیجم کرده اصن...

هرچی هم از c++ بلد بودم...یادم رفته :(

omidshaman
پنج شنبه 19 دی 1392, 20:51 عصر
یه سوال دیگه
برای تعریف کردن و استفاده کردن از کلاس توی کتاب جعفر نژاد قمی توی فصل 7
میاد اول یه فایل هدر مینوسه که کلاس توی اون تعریف شده...بعد یه فایل .cpp دیگه با همون نام در نظر میگه برای پیاده سازی کلاس و در نهایت یک فایل دیگه داره برای بدنه اصلی برنامه

حالا سوال بنده:
چرا فایل دوم رو داخل همون هدر نمیویسه؟
فایل دوم هیچ جایی فراخوانی نشده؟!
دلیل این همه فایل در فایل چیه؟!
ساختار C++ این جوریه تعریف کلاس و توابع و document کد داخل فایل .h انجام میشه پیاده سازیش توی .cpp
برای استفاده از کلاس - توابع هم باید فایل .h اینکلود بشه .

nokhodi
پنج شنبه 19 دی 1392, 20:57 عصر
برای یاد گیری رون سی پلاس چه منبعی معرفی میشه؟!

چه فارسی چه زبان اصل (جفتش)

کامبیز اسدزاده
پنج شنبه 19 دی 1392, 21:35 عصر
یه سوال دیگه
برای تعریف کردن و استفاده کردن از کلاس توی کتاب جعفر نژاد قمی توی فصل 7
میاد اول یه فایل هدر مینوسه که کلاس توی اون تعریف شده...بعد یه فایل .cpp دیگه با همون نام در نظر میگه برای پیاده سازی کلاس و در نهایت یک فایل دیگه داره برای بدنه اصلی برنامه

حالا سوال بنده:
چرا فایل دوم رو داخل همون هدر نمیویسه؟
فایل دوم هیچ جایی فراخوانی نشده؟!
دلیل این همه فایل در فایل چیه؟!

برای توضیح در این رابطه باید یه تعریف جامع کنم ولی به طور خلاصه بخوام بگم اینطور میتونم بگم که در C++ برنامه نویس هیچ محدودیتی رو در کد نویسی نداره برای اینکه کلاس ها و کد ها و همه توابع و هر چیزی که در برنامه بکار گرفته میشه مرتب و هر کدام در حالت استاندارد دارای بدنه و نوعی قالب در کد نویسی داشته باشند این روش استفاده میشه برای مثال شما کلاس ها و توابع رو میتونید در فایل header تعریف کنید و در مواقع لازم تنها با فراخوانی فایل هیدر در داخل فایل های cpp از اونها استفاده کنید.

برخلاف زبان های دیگر C++ این امکان رو به برنامه نویس میده که به طور دلخواه فایل ها و کلاس های خود رو سفارشی کنه که این نه تنها موجب مرتب بودن و دردسترس بودن فایل ها و کد ها میشه بلکه نوعی شیوه برنامه نویسی کاملا تمیزی هست که من شخصا در هیچ زبانی ندیدم.

و در ضمن این یک قانون نیست شما میتونید در همون فایل cpp یا header همه کد هارو یجا بنویسید و یکجا اجرا کنید ولی وقتی چنین قابلیت هایی رو در C++ داریم بهتره از بهترین قابلیت هاش به نحو احسن استفاده کنید.
پس هیچ اجباری هم وجود نداره که فایل هیدر باشه یا نباشه ! کلا هیدر ها فایل های برای بدنه سازی در C++ هستند و میشه هر چیزیرو توشون نوشت و در این میان فایل های cpp اصلیترین فایل های C++ هستند که بهتر است مستقیما دستورات اجرایی رو در این فایل ها بنویسید.

nokhodi
پنج شنبه 19 دی 1392, 22:02 عصر
برای توضیح در این رابطه باید یه تعریف جامع کنم ولی به طور خلاصه بخوام بگم اینطور میتونم بگم که در C++ برنامه نویس هیچ محدودیتی رو در کد نویسی نداره برای اینکه کلاس ها و کد ها و همه توابع و هر چیزی که در برنامه بکار گرفته میشه مرتب و هر کدام در حالت استاندارد دارای بدنه و نوعی قالب در کد نویسی داشته باشند این روش استفاده میشه برای مثال شما کلاس ها و توابع رو میتونید در فایل header تعریف کنید و در مواقع لازم تنها با فراخوانی فایل هیدر در داخل فایل های cpp از اونها استفاده کنید.

برخلاف زبان های دیگر C++ این امکان رو به برنامه نویس میده که به طور دلخواه فایل ها و کلاس های خود رو سفارشی کنه که این نه تنها موجب مرتب بودن و دردسترس بودن فایل ها و کد ها میشه بلکه نوعی شیوه برنامه نویسی کاملا تمیزی هست که من شخصا در هیچ زبانی ندیدم.

و در ضمن این یک قانون نیست شما میتونید در همون فایل cpp یا header همه کد هارو یجا بنویسید و یکجا اجرا کنید ولی وقتی چنین قابلیت هایی رو در C++ داریم بهتره از بهترین قابلیت هاش به نحو احسن استفاده کنید.
پس هیچ اجباری هم وجود نداره که فایل هیدر باشه یا نباشه ! کلا هیدر ها فایل های برای بدنه سازی در C++ هستند و میشه هر چیزیرو توشون نوشت و در این میان فایل های cpp اصلیترین فایل های C++ هستند که بهتر است مستقیما دستورات اجرایی رو در این فایل ها بنویسید.

ممنون از توضیح کاملتون...دیدم بهتر شد نسبت به موضوع...

sr2m72
پنج شنبه 19 دی 1392, 23:06 عصر
ممنون از توضیح کاملتون...دیدم بهتر شد نسبت به موضوع...

نظر من اینه که به توصیه های دوستان گوش کن و کلا کتاب جعفر نژاد رو بیخیال شو.

اینم یه مرجع خوب:
http://www.cplusplus.com/

Ananas
جمعه 20 دی 1392, 10:39 صبح
خوب اینکه فایل هدر با فایل cpp جدا هست به این درد میخوره که بخوایم پیاده سازی توابع رو داخل یک فایل جدا داشته باشیم که هر وقت بخوایم اونها رو با dll ارائه کنیم کافی باشه که فایل هدر رو به همراه dll به برنامه نویسای دیگه بدیم بدون اینکه به سورس توابع ما دسترسی داشته باشن! تعریف کلاس ها و قالب توابع چیزی پنهان کردنی ای نیست ولی کد داخل توابع و الگوریتمشون مهمه و با ارزش!

omidshaman
جمعه 20 دی 1392, 13:35 عصر
برای یاد گیری رون سی پلاس چه منبعی معرفی میشه؟!

چه فارسی چه زبان اصل (جفتش)
http://www.amazon.com/dp/0321714113
http://www.amazon.com/dp/020170353X

کامبیز اسدزاده
جمعه 20 دی 1392, 14:11 عصر
بهترین منبع همون http://cplusplus.com هست که رسمی و استاندارده.
منابع بعدی به صورت زیر :

www.procalculus.com
www.thecrazyprogrammer.com
www.HelloACM.com
www.codeplaza.org

از اینا بهترشو نمیتونی پیدا کنی.
در فیسبوک هم : https://www.facebook.com/cpptovlee این رو داشته باش به دردت میخوره.

کامبیز اسدزاده
جمعه 20 دی 1392, 14:17 عصر
من شخصا از منابع فارسی زیاد استفاده نکردم ولی یه سرچی تو گوگل بزنید راحتر پیدا میکنید مثل سایت ها : http://cplusplus.ir زیاد هستند ولی فراموش نکنید منابع رسمی و بین المللی بهتر از منابع فارسی هستند.

موفق باشید.

nokhodi
جمعه 20 دی 1392, 14:19 عصر
http://www.amazon.com/dp/0321714113
http://www.amazon.com/dp/020170353X


بهترین منبع همون http://cplusplus.com هست که رسمی و استاندارده.
منابع بعدی به صورت زیر :

www.procalculus.com
www.thecrazyprogrammer.com
www.HelloACM.com
www.codeplaza.org

از اینا بهترشو نمیتونی پیدا کنی.
در فیسبوک هم : https://www.facebook.com/cpptovlee این رو داشته باش به دردت میخوره.



ممنون برای معرفی منابع...:لبخندساده:

omidshaman
جمعه 20 دی 1392, 15:22 عصر
بهترین منبع همون http://cplusplus.com هست که رسمی و استاندارده.
منابع بعدی به صورت زیر :

www.procalculus.com (http://www.procalculus.com)
www.thecrazyprogrammer.com (http://www.thecrazyprogrammer.com)
www.HelloACM.com (http://www.HelloACM.com)
www.codeplaza.org (http://www.codeplaza.org)

از اینا بهترشو نمیتونی پیدا کنی.
در فیسبوک هم : https://www.facebook.com/cpptovlee این رو داشته باش به دردت میخوره.
چند تا هم من بگم
http://en.cppreference.com/w/cpp
http://www.stroustrup.com/ (http://www.stroustrup.com/C++‎‎‎‎.html)
http://msdn.microsoft.com/en-us/library/3bstk3k5.aspx
http://www.cpp-home.com/
http://stackoverflow.com/questions/tagged/c%2b%2b?sort=frequent&pageSize=50
http://www.cprogramming.com/
http://isocpp.org/
http://cboard.cprogramming.com/
http://www.glenmccl.com/glos.htm

ACM :
http://codeforces.com/
http://www.codechef.com/
https://www.topcoder.com/