PDA

View Full Version : توضیح جامع کلاسها در ++C



majid1605
جمعه 23 اردیبهشت 1390, 18:47 عصر
من با مبحث کلاسها به مشکل بر خوردم هر کاری می کنم متوجه نمیشم منظور از سازنده کپی و تساوی چیه و هچ مثال کاربردی در موردشون نتونستم پیدا کنم ممنون میشم دوستان در این مورد کمک کنن.
چندتا سوال دیگه هم دارم:
بیشتر سورس کدهایی رو که توی نت می گیرم اجرا نمیشن بعضی موقع ها به Cout, cin گیر میده که تعریف نشده هستند درصورتی که هدر فایل قبلاً include شده و توی همون برنامه به Cout, cin که چند خط بالاتر هستن بدون مشکل هستند.
تابع gotoxy(x,y) توی VS وجود نداره ?
چندتا مثال کاربردی که از کلاسها یا استراکت به صورت کاربردی استفاده شده برام بزارید هرچی بیشتر بهتر.
خودم یه برنامه نوشتم که تعداد دانش آموزان رو می گیره و بعدش اسم و نمره و تاریخ رو وارد می کنیم در اخر همه رو واسمون نمایش میده .


#include <iostream>
#include <string.h>
using namespace std;


class myclass
{
public:
int dd,mm,yy;
char name[20];
float score;
void Read()
{
cout << "Please enter your name =" ;
cin.getline(&name[0],20) ;
cout << "Please enter your score =";
cin >> score;
cout << "Please enter Day =" ;
cin >> dd;
cout << "Please enter Month =" ;
cin >> mm;
cout << "Please enter Year =" ;
cin >> yy;
cout << "///////////////////////////////////////////////////////\n";
}
};
int main()
{
int n;
cout << "Please enter the number of students =";
cin >> n;
myclass myvar , *store = new myclass[n];
if (store == NULL)
cout << "Can nat allocate memory";
else;
{
for (int i = 0 ; i < n ; i++)
store[i].Read();
for (int i = 0 ; i < n ; i++)
{
cout << "Name :" << store[i].name << endl;
cout << "Score :" << store[i].score << endl;
cout << "Data :" << store[i].yy <<"/" << store[i].mm <<"/" << store[i].dd <<endl;
cout << "**********************************************\n" ;

}
delete [] store ;
}
}


چندتا سوال دیگه :
توی برنامه نویسی توی کلاس بهتره کل تابع رو داخل کلاس تعریف کنیم یا اونو اعلان کنیم بعد خارج از کلاس کل تابع رو بنویسیم ؟اگه مزایا و معایب هر کدوم رو هم بگید که خوب میشه از همین ابتدا راه درست رو در پیش بگیریم.
اصلاً مگه هرکاری که با استراکت میتونیم انجام بدید با کلاس هم نمیشه انجام داد .حالا اگه هیچوقت از استراکت توی برنامه هامون استفاده نکنیم ایرادی داره ؟
کد بالا رو میشه به روش بهتری نوشت ؟از لحاظ خوانایی و اجرای سریعتر البته با کلاس چون من می خوام با کلاسها بیشتر اشنا بشم.
چندتا سوال دیگه هم داشتم که یادم رفت اینقدر تایپ کردم

moh3en_f1
جمعه 23 اردیبهشت 1390, 19:23 عصر
بیشتر سورس کدهایی رو که توی نت می گیرم اجرا نمیشن بعضی موقع ها به Cout, cin گیر میده که تعریف نشده هستند درصورتی که هدر فایل قبلاً include شده و توی همون برنامه به Cout, cin که چند خط بالاتر هستن بدون مشکل هستند.

دوست من خوب ممکنه تو یه جایی دیگه از برنامه چیزی رو اشتباه نوشته باشی یا اینکه ; سیمی کالون نذاشته باشی. برای مطمئن شدن بگو کجای برنامه ات ارور میده تا مشکلت رو شاید تونستیم حل کنیم


دوست من موفق باشی
من زیاد از سی پلاس سر در نمیارم چون تازه باهاش شروع به کار کردم امیدوارم کسی دیگه ای بتونه مشکلاتت رو حل کنه

milad.kian
شنبه 24 اردیبهشت 1390, 20:43 عصر
کپی کانستراکتور و اوپراتور تساوی تقریبا یکی هستن . شما یه object جدیدی رو می تونید با استفاده از این دو از روی یه object دیگه بسازید !
جواب سوال دوم هم خیلی علت داره . using namespce std یا فراموس کردن ; و ...


توی برنامه نویسی توی کلاس بهتره کل تابع رو داخل کلاس تعریف کنیم یا اونو اعلان کنیم بعد خارج از کلاس کل تابع رو بنویسیم ؟اگه مزایا و معایب هر کدوم رو هم بگید که خوب میشه از همین ابتدا راه درست رو در پیش بگیریم.بستگی داره . اگه بشه اون تابع رو با یک دستور نوشت اصطلاحا تابع اینلاین بهش میگن . مثل geter و seter ها و کانستراکتور ها . به جز این ها بهتره باقی رو خارج کلاس تعریف کرد.


اصلاً مگه هرکاری که با استراکت میتونیم انجام بدید با کلاس هم نمیشه انجام داد .حالا اگه هیچوقت از استراکت توی برنامه هامون استفاده نکنیم ایرادی داره ؟درسته شباهت دارن . ولی فرق اصلی اونا تو دسترسی به متغیر هاست . بستگی به نیازت میتونی از هر کدوم دوست داری استفاده کنی ! کلاس بهتره !

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

متغیر ها باید تو private باشه ! بعد هم نباید به اون صورت تابع ها رو تو کلاس بنویسی . همنجور که گفتم فقط

in line

یه شبیه سازی توپ و میز هم ضمیمه کردم ! خوش باشید !

majid1605
یک شنبه 25 اردیبهشت 1390, 17:24 عصر
میشه درمورد این برنامه ایی که گذاشتی یه توضیح بدی .
اگه برنامه ایی که خودم گذاشتم رو به صورت استاندارد در بیاری و بزاری ممنون میشم.چون میخوام بدونم کجا ها رو اشتباه کردم اگه هم میدونید واسه راهنمایی بهتر نیاز به اضافه کردن توابع دیگه ایی داره بهش اضافه کنید.چون واقعاً اگه این مبحث کلاسها رو به صورت جامع یاد بگیرم کار تمومه.
شما که زحمت کشیدید در مورد کپی و مساوی یه توضیح کاملتر البته با مثال بدید.
بازم ممنون:تشویق:

milad.kian
یک شنبه 25 اردیبهشت 1390, 21:55 عصر
واقعا شرمنده . من وقت این کار رو ندارم . این برنامه ای که آپ کردم شبیه سازی یه توپ و یه میزه که به توپ یه صرعتی میدید و به میز هم ابعاد . این برنامه در هر ثانیه میگه این توپ کجای میزه ! برای شروع کمی سخت بود!

الان گشتم و یه کلاس تاریخ پیدا کردم که فکر کنم به دردت بخوره ! این کلاس رو دقیقا مرور کن . اگه خواستی تو این برنامه خودت میتونی استفاده کنی . این کلاس فاصله دو تاریخ رو میگه و...

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


یادم رفت بگم که gotoxy در vs وجود نداره ! ولی میتونی تو بعضی از کامپایلر ها پیدا کنی !

majid1605
یک شنبه 25 اردیبهشت 1390, 23:58 عصر
شما هر مثالی رو که می دونی بدردم می خوره بزارید البته به راحتی بشه با vs کامپایل بشه من دنبالش رو می گیرم اگه هم به مشکلی بر خوردم از خود شما یا بقیه دوستان کمک می گیرم. ممنون
مشابه gotoxy در vs وجود نداره ؟
یه نگاهی به اینجا هم می ندازی شاید بتونی مشکل رو حل کنی
http://barnamenevis.org/showthread.php?286398-%D9%85%D8%B4%DA%A9%D9%84-%D8%A8%D8%A7-%D9%88%DB%8C%DA%98%D8%A7%D9%84-2010

مشکل اینجاست که توی شهرمون کلاس خوب پیدا نکردم .البته توی همین فرمها تا حالا دوستان خیلی کمک کردن .
یه جورایی ه دارم کتاب می خونم و هم از سایت cplusplus کمک می گیرم البته انگلیسیم اونقدرها تعریفی نیست ولی همزمان دارم یه کتاب هم می خونم .

milad.kian
دوشنبه 26 اردیبهشت 1390, 21:18 عصر
vs 2010 یکم فرق داره با 6 یا ... واسه هر پوژه باید یه پروژه جدید بسازی و فایل های CPP , .h رو توش اضافه کنی !