صفحه 2 از 5 اولاول 1234 ... آخرآخر
نمایش نتایج 41 تا 80 از 172

نام تاپیک: مشكلات من با ++C

  1. #41
    کاربر تازه وارد آواتار majmaji
    تاریخ عضویت
    خرداد 1388
    محل زندگی
    تهران
    سن
    34
    پست
    96

    نقل قول: مشكلات من با ++C

    دادا دستت درد نکنه از این همه امیدی که به من میدی
    حالا یه سوال دیگه در ادامه با عنوان "کلاس gradebook با یک داده ی عضو، تابع مقدار گذاری نوشتن set و تابع خواندن get" میرسیم که نویسنده سعی داره به مثال قبلی دو تا تابع عضو کلاس و یک عدد داده ی عضوی اضافه کنه.
    اما به نظر من خیلی پیچونده تقریبا این دو تا کاری رو که کرده برنامه رو هیچ تغییر خاصی نمیده
    class GradeBook
    {
    public:
    void setCourseName( string name )
    {
    courseName = name;
    }
    string getCourseName()
    {
    return courseName;
    }
    void displayMessage()
    {
    cout << "welcome to the gradeBook for\n" << getCourseName() << "!" << endl;
    }
    private:
    string courseName;
    };
    int main()
    {
    string name0fcourse;
    GradeBook myGradeBook;
    cout <<"initial course name is:" << myGradeBook.getCourseName() << endl;
    cout << "please enter the course name:" << endl;
    getline( cin, name0fcourse );
    myGradeBook.setCourseName( name0fcourse );
    cout << endl;
    myGradeBook.displayMessage();
    getch();
    return 0;
    }

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

  2. #42
    کاربر دائمی آواتار mabbaszadegan
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    تهران
    پست
    185

    نقل قول: مشكلات من با ++C

    سلام
    شرمنده اگه دیر شد

    بذار از اول برنامه رو بررسی کنیم :
    اول از همه باید ببینیم عضو داده ای چیه ؟
    یادته ، توی تابع main مثلا میگفتیم :

    int a;



    string b;
    int m[10];

    a یک داده معمولی از جنس صحیح و b یک داده از نوع رشته و m آرایه ای 10تایی از اعداد صحیح است

    حالا فرض کن همین داده ها رو بیاییم تو کلاس تعریف کنیم ؛ در این صورت به اونا میگن اعضای داده ای

    نکته : اعضای داده ای کلاس معمولا به صورت private تعریف میشند ؛ پس فقط توابع عضو کلاس به این اعضا دسترسی دارند

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

    واما توابع عضو :
    گفتم که courseName یک عضو داده ای private و فقط توابع عضو کلاس به اون دسترسی دارند،
    پس برای مقداردهی به این عضو داده ای ما باید از یک تابع عضو کمک بگیریم


    void setCourseName( string name )
    {
    courseName = name;
    }


    این تابع یک string رو از کاربر میگیره و courseName رو برابر اون قرار میده

    تا اینجا ما مقداری رو به عضو داده ای اختصاص دادیم ، حالا باید یه تابع دیگه بنویسیم تا مقدار این عضو داده ای رو برگردونه ؛ به این صورت :

    string getCourseName()
    {
    return courseName;
    }


    تابع بعدی رو دوس دارم خودت روش فک کنی ، خیلی واضحه


    فقط در آخر یه چیزو یادت باشه :
    فقط اعضای public کلاس رو میشه تو تابع main استفاده کرد و اعضای private کلاس فقط توسط توابع عضو کلاس قابل دسترسند ؛ یعنی اگه تو تابع main کد زیر رو بنویسی ازت خطا میگیره :

    myGradeBook.courseName = "mohammad";

    با این روش شاید کد کمی طولانی تر بشه ، ولی امنیت برنامه بالا میره


    سوالی بود در خدمتم
    موفق باشی

  3. #43
    کاربر تازه وارد آواتار majmaji
    تاریخ عضویت
    خرداد 1388
    محل زندگی
    تهران
    سن
    34
    پست
    96

    نقل قول: مشكلات من با ++C

    پس دادا یعنی نوع دسترسی public و private هم برای توابع به کار میره و هم برای اعضای داده ای؟
    اگر هم ننویسیم که public هست خودش اون رو private حساب میکنه؟

  4. #44
    کاربر تازه وارد آواتار majmaji
    تاریخ عضویت
    خرداد 1388
    محل زندگی
    تهران
    سن
    34
    پست
    96

    نقل قول: مشكلات من با ++C

    سلام دوباره من خیلی فکر کردم ولی باز نفهمیدم بذار سوالاتم رو اینطوری بپرسم:
    class GradeBook
    {
    public:
    void setCourseName( string name )
    {
    courseName = name;
    }

    در اینجا نوع دسترسی public برای کلاس هست یا برای تابع setCourseName؟


    تو کتاب تو برنامه ای که نوشته جلوش یه توضیحاتی هم نوشته حالا سوال من:
      void setCourseName( string name )
    {
    courseName = name;
    }

    توی خطی که مقدار coursename رو برابر name کرده نوشته:
    store the coursename in the object
    خوب حالا سوال: اینجا object ما کدومه؟ اصلاً مگه شیوه تعریف object یه طور دیگه نبود مثلاً gradebook mygradebook مگه الان من یه شی از کلاس gradebook درست نکردم؟ پس الان اینجا کدوماشون شی هستند؟ coursename یا name?
    سوال بعدی:
      void displayMessage()
    {
    cout << "welcome to the gradeBook for\n" << getCourseName() << "!" << endl;
    }

    اینجا تابع displaymessage هیچ پارامتری نداره. چرا؟ چرا در مثال قبلی داشت؟ چرا تابع setcoursename پارامتر عضو داره؟
    یه سوال دیگه توی cout رو نگاه کنید بدون استفاده از شی تابع getcoursename رو خونده. آیا درسته؟
    یه سوال دیگه:
    به این خط توجه کنید:
     private:
    string courseName;

    اومده قبل از اینکه کلاس تموم شه یه پارامتری رو به نام coursename از نوع string تعریف کرده که قبلاً (یعنی قبل از اینکه تعریف کنه) دو بار در دو تابع از اون استفاده کرده
     void setCourseName( string name )
    {
    courseName = name;
    }
    string getCourseName()
    {
    return courseName;
    }

    خوب مگه ما نگفته بودیم تا قبل از اینکه از داده ای استفاده کنیم باید حتماً قبلش تعریفش کنیم؟ مثلا قبل از اینکه ما a رو با b جمع کنیم باید حتما بگیم int a, b درسته؟ پس چرا اینجا اینجوری نکرده؟
    تازه مگه ما نگفتیم هر داده ای که تعریف میشه باید عضو تابعی باشه؟ پس چرا اینجا خارج از این سه تابع نوشته؟
    و سوال آخر:
    این خط از برنامه چه کاری رو انجام میده به نظرتون این خط اضافی نیست؟
      cout <<"initial course name is:" << myGradeBook.getCourseName() << endl;

  5. #45
    کاربر دائمی آواتار mabbaszadegan
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    تهران
    پست
    185

    نقل قول: مشكلات من با ++C

    سلام ، شرمنده اگه دیر شد

    اول بزار کل کد رو یه بار با دقت بررسی کنیم :
     
    class GradeBook
    {
    public:
    // function that sets the course name
    void setCourseName( string name )
    {
    courseName = name; // store the course name in the object
    } // end function setCourseName

    // function that gets the course name
    string getCourseName()
    {
    return courseName; // return the object's courseName
    } // end function getCourseName

    // function that displays a welcome message
    void displayMessage()
    {
    // this statement calls getCourseName to get the
    // name of the course this GradeBook represents
    cout << "Welcome to the grade book for\n" << getCourseName() << "!"
    << endl;
    } // end function displayMessage
    private:
    string courseName; // course name for this GradeBook
    }; // end class GradeBook

    خب ، این کلاس یه عضو داده ای private داره به اسم courseName ؛
    اگه یادت باشه گفتم اعضای private فقط در دسترس توابع عضو خود کلاس هستند ، پس برای مقداردهی به این عضو داده ای ما باید از توابع عضو set و get کمک بگیریم ؛
    تابع setCourseName ، عضو courseName رو با رشته ای که از ورودی میگیره مقداردهی میکنه ، اینو ببین :
    GradeBook myGradeBook
    شی myGradeBook ساخته شد، فعلا این شی خالیه , یعنی اگه با استفاده از تابع getCourseName بنویسی :
     
    cout<<myGradeBook.getCourseName() ;
    هیچی تو خروجی چاپ نمیشه ؛
    حالا اینو ببین :
     
    string str;
    cout<<"Please enter a name: ";
    cin>>str;
    myGradeBook.setCourseName(str)
    توی این کد کاربر خودش شی myGradeBook رو مقداردهی میکنه ، حالا اگه دوباره بنویسی :
     
    cout<<myGradeBook.getCourseName() ;
    میبینی که این دفعه توی خروجی همون اسمی که کاربر میده ، چاپ میشه ؛

    این معنی همون جمله store the coursename in the object هستش ، یعنی شی توسط متغیر coursename مقداردهی میشود ؛

    اگه تا اینجا سوالی نداری بریم سراغ سوال بعدیت :

    تابع displaymessage هیچ پارامتری نداره. چرا؟
    خب این تابع میخواد یه متن ثابت رو رو خروجی چاپ کنه ، یه چیزی مثل گزارش ، پس نیازی نداره که پارامتر داشته باشه ؛

    چرا تابع setcoursename پارامتر عضو داره؟
    چون این تابع وظیفه ش اینه که یه رشته رو بگیره و بریزه تو coursename ؛

    توی cout ، بدون استفاده از شی تابع getcoursename رو خونده. آیا درسته؟
    احتمالن یه خورده حواستو جمع میکردی خودت میگرفتی :دی :دی
    ما تو تابع main از اشیا استفاده میکنیم ؛ اینجا ما تو خود کلاسیم ، پس تعریف شی اصلا معنی نداره

    کد:
    private: string courseName;
    اومده قبل از اینکه کلاس تموم شه یه پارامتری رو به نام coursename از نوع string تعریف کرده که قبلاً (یعنی قبل از اینکه تعریف کنه) دو بار در دو تابع از اون استفاده کرده
    کد:
    void setCourseName( string name ) { courseName = name; } string getCourseName() { return courseName; }
    خوب مگه ما نگفته بودیم تا قبل از اینکه از داده ای استفاده کنیم باید حتماً قبلش تعریفش کنیم؟ مثلا قبل از اینکه ما a رو با b جمع کنیم باید حتما بگیم int a, b درسته؟ پس چرا اینجا اینجوری نکرده؟
    تازه مگه ما نگفتیم هر داده ای که تعریف میشه باید عضو تابعی باشه؟ پس چرا اینجا خارج از این سه تابع نوشته؟

    حرفت کاملا منطقیه ولی تو برنامه نویسی ساخت یافته ؛
    توی برنامه نویسی شی گرا وقتی یه کلاس طراحی میکنی ، اولین چیزی که بررسی میشه اعضای داده ای کلاسند ، یعنی فرق نمیکنه عضو داده ای رو کجای کلاس معرفی کنی
    پس اینجا اول کلاس میدونه که یه عضو داده ای private به نام courseName داره و بعد توابع عضو رو بر همین اساس تحلیل میکنه ؛
    البته اگه اعضای داده ای رو همون اول تعریف کلاس بنویسیم ، کد خواناتر میشه ؛

    این خط از برنامه چه کاری رو انجام میده به نظرتون این خط اضافی نیست؟
    کد:
    cout <<"initial course name is:" << myGradeBook.getCourseName() << endl;

    این خط میخواد فقط بگه که شی myGradeBook اول خالیه ،


    امیدوارم تونسته باشم کمکت کنم ،
    اگه سوالی بود در خدمتم

  6. #46
    کاربر تازه وارد آواتار majmaji
    تاریخ عضویت
    خرداد 1388
    محل زندگی
    تهران
    سن
    34
    پست
    96

    نقل قول: مشكلات من با ++C

    خوب دادا يعني چي شي ما خاليه؟
    يه سوال ديگه تابع هايي كه پارامتر دارن يه چيزي رو چاپ ميكنن كه ممكنه تغير كنه مثلاً يه بار نام درس فيزيك باشه و در دفعه دومي كه اجرا ميشه نام درس شيمي باشه و توابعي كه پارامتر عضو ندارن چيزي رو چاپ ميكنن كه ثابت هست. درسته؟ يا ممكنه كارايي ديگه اي هم داشته باشه؟

  7. #47
    کاربر دائمی آواتار mabbaszadegan
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    تهران
    پست
    185

    نقل قول: مشكلات من با ++C

    بذار خالی بودن اشیا رو زمانی که constructor (سازنده ها) رو خوندی برات توضیح میدم


    اما در مورد تابع بدون پارامتر :
    ممکنه یه تابع پارامتر نداشته باشه ولی درون خودش یه تابع رو صدا بزنه که اون تابع مقادیر مختلفی رو برمی گردونه ، مثلا :

    void displayMessage()
    {
    cout << "Welcome to the grade book for\n" << getCourseName() << "!"
    << endl;
    }
    اینجا داخل تابع displayMessage ، تابع getCourseName صدا زده شده که این تابع هربار مقدار شی را برمیگردونه و ممکنه دارای مقادیر مختلف باشه




  8. #48
    کاربر تازه وارد آواتار majmaji
    تاریخ عضویت
    خرداد 1388
    محل زندگی
    تهران
    سن
    34
    پست
    96

    نقل قول: مشكلات من با ++C

    آها پس من یه بار میگم ببین درست فهمیدم یا نه؟
    خوب ما اومدیم کلاس grade book رو تعریف کردیم و نوع دسترسی رو public تعیین کردیم (راستی public بودن کلاس به چه درد میخوره؟)
    بعد از اون اومدیم سه تا تابع معرفی کردیم:
    اولی setcoursename با پارامتر string name این تابع مقدار coursename رو در name ذخیره میکنه همونطوری که در جلوی توضیحاتش نوشته store the coursename in the object (یعنی اینکه name یک object هست؟)
    تابع setcoursename از نوع void هست و هیچ مقداری رو بر نمیگردونه
    تابع دومی تابع getcoursename هست که از نوع string هست و هیچ پارامتری نداره.
    این تابع object که برای coursename است رو برمیگردونه. (یعنی name?)
    تابع سوم تابع displaymessage است که از نوع void میباشد این تابع، تابع getcoursename رو میخونه برای گرفتن نام درس و چون ما در تابع main نیستیم میتونیم بدون معرفی یه شی این تابع رو فراخوانی کنیم؟
    قبل از پایان کلاس متغیر coursename معرفی میشه.
    بعد تابع main از نوع int شروع میشه متغیر nameofcourse معرفی میشه (آیا این آرگومان تابع setcoursename است؟)
    بعد از اون یک شی از کلاس تعریف میشه و بعدش توسط خطی میخواد بگه فقط شی ما خالیه (که من نمیدونم یعنی چی)
    بعد از اون توسط خطی که در خروجی چاپ میشه از کاربر می خواد که نام درسی رو وارد کنه
    نام درس رو توسط تابع getline گرفته و در nameofcourse ذخیره میکنه
    خط بعدی رو اصلا یعنی قبلا دیدم ولی نمیدونم چیکار مکنه؟ این هم خط:
    mygradebook.setcoursename( nameofcourse );
    خط آخر هم تابع displaymessage رو فراخوانی میکنه
    و برنامه نموم میشه

  9. #49
    کاربر دائمی آواتار mabbaszadegan
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    تهران
    پست
    185

    نقل قول: مشكلات من با ++C

    ما اومدیم کلاس grade book رو تعریف کردیم و نوع دسترسی رو public تعیین کردیم (راستی public بودن کلاس به چه درد میخوره؟)
    این چه حرفیه ؟!!!!
    نوع دسترسی توابع عضو رو public تعریف کردیم

    بقیشو تقریبا درست گفتی :دی
     
    myGradeBook.setCourseName( nameOfCourse );

    این خط برنامه شی myGradeBook رو مقداردهی میکنه ، یعنی رشته ای رو که از کاربر گرفته میریزه تو شی ؛

  10. #50
    کاربر تازه وارد آواتار majmaji
    تاریخ عضویت
    خرداد 1388
    محل زندگی
    تهران
    سن
    34
    پست
    96

    نقل قول: مشكلات من با ++C

    آها درسته.
    اون بقیه سوالا که قرمز نوشتم چی؟ اونا رو هم درست گفتم؟

  11. #51
    کاربر دائمی آواتار mabbaszadegan
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    تهران
    پست
    185

    نقل قول: مشكلات من با ++C

    آره ، تقریبا درست گفتی

    ببین به نظرم داری حفظ میکنی ، اگه الان چندتا کد بنویسی خیلی بیشتر به دردت میخوره

    مثلا برای شروع یه کلاس طراحی کن که مشخصات یه دانشجو (نام ، شماره دانشجویی ، سن و معدل ) رو بگیره (این 4 تا میشند اعضای داده ای کلاس) ؛ توابع set و get رو برای هرکدوم بنویس و یه تابع هم بنویس که اطلاعات مربوط به یک دانشجو رو نشون بده
    شروع کن ، تا هرجا که نوشتی کدشو بزار اینجا باهم بررسی کنیم

  12. #52
    کاربر دائمی آواتار mabbaszadegan
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    تهران
    پست
    185

    نقل قول: مشكلات من با ++C

    نه داداش ، این چه حرفیه

    تا ننویسی یاد نمیگیری ، من خودمم خیلی چیزا رو اینجا یادگرفتم

    موفق باشی

  13. #53
    کاربر تازه وارد آواتار majmaji
    تاریخ عضویت
    خرداد 1388
    محل زندگی
    تهران
    سن
    34
    پست
    96

    نقل قول: مشكلات من با ++C

    من برنامه رو نوشتم ولی واقعاً درست نیست و کار نکرد نمیدونم مشکلم کجاست ولی کدش به شکل زیر است.
    #include <cstdlib>
    #include <iostream>
    #include <conio.h>
    #include <string>
    using namespace std;


    class GradeBook
    {
    public:
    void setname (string name) //tabei ke name daneshjo ra zakhire mikonad
    {
    setname = name;
    }
    string getname() //tabei ke name daneshjo ro migire
    {
    return setname;
    }
    void setshomaredaneshjo (string shomaredaneshjo)//tabei ke shomare daneshjoei ra zakhire mikonad
    {
    setshomaredaneshjo = shomaredaneshjo;
    }
    string getshomaredaneshjo()
    {
    return getshomaredaneshjo;
    }
    void sen (string sen) //tabei ke name daneshjo ra zakhire mikonad
    {
    setsen = sen;
    }
    string getsen() //tabei ke name daneshjo ro migire
    {
    return setsen;
    }
    void setmoadel (string moadel) //tabei ke name daneshjo ra zakhire mikonad
    {
    setmoadel = moadel;
    }
    string getmoadel() //tabei ke name daneshjo ro migire
    {
    return setmoadel;
    }
    void displaymessage()//tabei ke etelaate daneshjoo ra neshan midahad.
    {
    cout <<"etelaate daneshjo:"<< getname()<< getshomaredaneshjo()<< getsen()<< getmoadel()<<endl;
    }
    string name;
    string shomaredaneshjo;
    string sen;
    string moadel;
    };
    int main()
    {
    string nameofname;
    string nameofshomaredaneshjo;
    string nameofsen;
    string nameofmoadel;
    gradebook mygradebook;

    cout << "etelaate daneshjoyane daneshgah" <<mygradebook.getname() << mygradebook.etshomaredaneshjo() << mygradebook.getsen() << mygradebook.getmoadel()<<endl;
    cout <<"etelaate daneshjo ra vared konid"<<endl;
    getline(cin,nameofname, nameofshomaredaneshjo, nameofsen, nameofmoadel);
    mygradebook.setname( nameofname );
    mygradebook.setshomaredaneshjo( nameofshomaredaneshjo );
    mygradebook.setsen( nameofsen );
    mygradebook.setmoadel( nameofmoadel );
    cout << endl;
    mygradebook.displaymessage();
    getch();
    return 0;
    }

  14. #54

    نقل قول: مشكلات من با ++C

    ba salam man yek taze vared hastam va manam ye soal dashtam chetori mitoonam ye adad 20 raghami dar mabnaye 16 daryaf konam
    ba tashakkor

  15. #55
    کاربر دائمی آواتار mabbaszadegan
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    تهران
    پست
    185

    نقل قول: مشكلات من با ++C

    1. اعضای داده ای رو باید به صورت private تعریف میکردی
    2. توابع set باید اعضای داده ای رو مقداردهی کنند
    3. توابع get باید اعضای داده ای رو برگردونند

    این کد رو ببین :


    class student {
    private:
    string name;
    string shomaredaneshjo;
    int sen;
    int moadel;
    public:
    void setname(string a) {
    name=a;
    }
    string getname() {
    return name;
    }
    void setshomaredaneshjo(string b) {
    shomaredaneshjo=b;
    }
    string getshomaredaneshjo() {
    return shomaredaneshjo;
    }


    بقیشو سعی کن خودت بنویسی ، سوالی بود در خدمتم

  16. #56
    کاربر دائمی آواتار mabbaszadegan
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    تهران
    پست
    185

    نقل قول: مشكلات من با ++C

    نقل قول نوشته شده توسط computer_science مشاهده تاپیک
    ba salam man yek taze vared hastam va manam ye soal dashtam chetori mitoonam ye adad 20 raghami dar mabnaye 16 daryaf konam
    ba tashakkor
    سلام
    برای دریافت اعداد بزرگ باید از ساختمان های داده ای مثل لینک لیست کمک بگیری ،
    شروع کن به نوشتن ، بعد کدتو بذار تا باهم بررسی کنیم

  17. #57
    کاربر تازه وارد آواتار majmaji
    تاریخ عضویت
    خرداد 1388
    محل زندگی
    تهران
    سن
    34
    پست
    96

    نقل قول: مشكلات من با ++C

    نقل قول نوشته شده توسط mabbaszadegan مشاهده تاپیک
    1. اعضای داده ای رو باید به صورت private تعریف میکردی
    2. توابع set باید اعضای داده ای رو مقداردهی کنند
    3. توابع get باید اعضای داده ای رو برگردونند

    این کد رو ببین :


    class student {
    private:
    string name;
    string shomaredaneshjo;
    int sen;
    int moadel;
    public:
    void setname(string a) {
    name=a;
    }
    string getname() {
    return name;
    }
    void setshomaredaneshjo(string b) {
    shomaredaneshjo=b;
    }
    string getshomaredaneshjo() {
    return shomaredaneshjo;
    }

    بقیشو سعی کن خودت بنویسی ، سوالی بود در خدمتم
    آها درسته اما یه سوال دیگه
    اونجا تو اون تابعی که از return استفاده کردی مگه نباید ما a رو return کنیم پس چرا name رو return کرده؟

  18. #58
    کاربر دائمی آواتار mabbaszadegan
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    تهران
    پست
    185

    نقل قول: مشكلات من با ++C

    توابع get باید اعضای داده ای رو برگردونند ؛
    مثلا تابع getname باید name رو برگردونه

  19. #59
    کاربر تازه وارد آواتار majmaji
    تاریخ عضویت
    خرداد 1388
    محل زندگی
    تهران
    سن
    34
    پست
    96

    نقل قول: مشكلات من با ++C

    آها فهمیدم ببین من برنامه رو تا اونجایی که گفتی نوشتم بقیشم اینشکلی نوشتم همشو پشت هم می نویسم
    #include <cstdlib>
    #include <iostream>
    #include <conio.h>

    using namespace std;

    #include <string>
    class student
    {
    private:
    string name;
    string shomaredaneshjo;
    int sen;
    int moadel;
    public:
    void setname(string a)
    {
    name=a;
    }
    string getname()
    {
    return name;
    }
    void setshomaredaneshjo(string b)
    {
    shomaredaneshjo=b;
    }
    string getshomaredaneshjo()
    {
    return shomaredaneshjo;
    }
    void setsen(int c)
    {
    sen=c;
    }
    string getsen()
    {
    return sen;
    }
    void setmoadel (int d)
    {
    moadel=d;
    }
    string getmoadel()
    {
    return moadel;
    }
    void displaymessage()
    {
    cout<<"etelaate daneshjo\n"<<getname()<<getshomaredaneshjo()<<gets en()<<getmoadel()<<endl;
    }
    private:
    string name;
    string shomaredaneshjo;
    int sen;
    int moadel;
    };
    int main()
    {
    string name0fnamedaneshjo;
    string name0fshomaredaneshjo;
    int name0fsenedaneshjo;
    int name0fmoadeledaneshjo;
    gradebook mygradebook;

    cout<<"lotfan etelaate daneshjo ra vared konid:"<<endl;
    getline(cin, name0fnamedaneshjo);
    mygradebook.setname(name0fnamedaneshjo);
    getline(cin, name0fshomaredaneshjo);
    mygradebook.setname(name0fshomaredaneshjo);
    getline(cin, name0fsenedaneshjo);
    mygradebook.setname(name0fsenedaneshjo);
    getline(cin, name0fmoadeledaneshjo);
    mygradebook.setname(name0fmoadeledaneshjo);
    cout<<endl;
    mygradebook.displaymessage();
    getch();
    return 0;
    }

  20. #60
    کاربر دائمی آواتار mabbaszadegan
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    تهران
    پست
    185

    نقل قول: مشكلات من با ++C

    خوبه ، فقط دوتا مشکل وجود داره :
    1. اعضای داده ای رو یه بار اول کلاس و یه بار آخر کلاس تعریف کردی !!
    یکیشو پاک کن

    2. به جای gradebook باید بنویسی student (اسم کلاس عوض شده) ؛ مثلا برای تعریف شی اینطوری بنویس:
     
    student mystudent ,std1,std2;

    الان سه تا شی mystudent ,std1,std2 از کلاس student تعریف شدند

  21. #61
    کاربر تازه وارد آواتار majmaji
    تاریخ عضویت
    خرداد 1388
    محل زندگی
    تهران
    سن
    34
    پست
    96

    نقل قول: مشكلات من با ++C

    چرا سه تا مگه با یکی نمیتونیم تابع ها رو فراخوانی کنیم؟

  22. #62
    کاربر دائمی آواتار mabbaszadegan
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    تهران
    پست
    185

    نقل قول: مشكلات من با ++C

    آره
    فقط خواستم مثال زده باشم ،
    یک شی کافیه

  23. #63

    نقل قول: مشكلات من با ++C

    نقل قول نوشته شده توسط mabbaszadegan مشاهده تاپیک
    سلام
    برای دریافت اعداد بزرگ باید از ساختمان های داده ای مثل لینک لیست کمک بگیری ،
    شروع کن به نوشتن ، بعد کدتو بذار تا باهم بررسی کنیم
    با سلام
    با تشکر از شما برای جوابتون
    اما من برنامه نویسی به زبان cدارم اونجا چطور میشه؟

  24. #64
    کاربر تازه وارد آواتار majmaji
    تاریخ عضویت
    خرداد 1388
    محل زندگی
    تهران
    سن
    34
    پست
    96

    نقل قول: مشكلات من با ++C

    اما یه سوال
    برنامه ای که نوشتم 8 تا ارور داد چرا؟ مگه کجاش مشکل داره؟

  25. #65
    کاربر دائمی آواتار mabbaszadegan
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    تهران
    پست
    185

    نقل قول: مشكلات من با ++C

    کدتو بذار ببینم

  26. #66
    کاربر تازه وارد آواتار majmaji
    تاریخ عضویت
    خرداد 1388
    محل زندگی
    تهران
    سن
    34
    پست
    96

    نقل قول: مشكلات من با ++C

    #include <cstdlib>
    #include <iostream>
    #include <conio.h>
    #include <string>

    using namespace std;


    class student
    {
    private:
    string name;
    string shomaredaneshjo;
    int sen;
    int moadel;
    public:
    void setname(string a)
    {
    name=a;
    }
    string getname()
    {
    return name;
    }
    void setshomaredaneshjo(string b)
    {
    shomaredaneshjo=b;
    }
    string getshomaredaneshjo()
    {
    return shomaredaneshjo;
    }
    void setsen(int c)
    {
    sen=c;
    }
    string getsen()
    {
    return sen;
    }
    void setmoadel (int d)
    {
    moadel=d;
    }
    string getmoadel()
    {
    return moadel;
    }
    void displaymessage()
    {
    cout<<"etelaate daneshjo\n"<<getname()<<getshomaredaneshjo()<<gets en()<<getmoadel()<<endl;
    }

    };
    int main()
    {
    string name0fnamedaneshjo;
    string name0fshomaredaneshjo;
    int name0fsenedaneshjo;
    int name0fmoadeledaneshjo;
    student mystudent;

    cout<<"lotfan etelaate daneshjo ra vared konid:"<<endl;
    getline(cin, name0fnamedaneshjo);
    mystudent.setname(name0fnamedaneshjo);
    getline(cin, name0fshomaredaneshjo);
    mystudent.setshomaredaneshjo(name0fshomaredaneshjo );
    getline(cin, name0fsenedaneshjo);
    mystudent.setsen(name0fsenedaneshjo);
    getline(cin, name0fmoadeledaneshjo);
    mystudent.setmoadel(name0fmoadeledaneshjo);
    cout<<endl;
    mystudent.displaymessage();
    getch();
    return 0;
    }

    این هم کد البته بگم من اون تغیرات رو توش انجام دادم ولی بازم ارور داد 6 تا هم ارور داد

  27. #67
    کاربر دائمی آواتار mabbaszadegan
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    تهران
    پست
    185

    نقل قول: مشكلات من با ++C

    1. تابع getsen ، متغیر sen رو برمیگردونه ، پس باید نوعش int باشه
    2. تابع getmoadel هم باید نوعش int باشه ،
    3. برای خوندن رشته ها از getline استفاده کن ، چون دو متغیر name0fsenedaneshjo و name0fmoadeledaneshjo از نوع int هستند پس برای خوندنشون از cin معمولی باید استفاده کنی

    در کل کد تصحیح شده میشه این :

    #include <cstdlib>
    #include <iostream>
    #include <conio.h>
    #include <string>

    using namespace std;


    class student
    {
    private:
    string name;
    string shomaredaneshjo;
    int sen;
    int moadel;
    public:
    void setname(string a)
    {
    name=a;
    }
    string getname()
    {
    return name;
    }
    void setshomaredaneshjo(string b)
    {
    shomaredaneshjo=b;
    }
    string getshomaredaneshjo()
    {
    return shomaredaneshjo;
    }
    void setsen(int c)
    {
    sen=c;
    }
    int getsen()
    {
    return sen;
    }
    void setmoadel (int d)
    {
    moadel=d;
    }
    int getmoadel()
    {
    return moadel;
    }
    void displaymessage()
    {
    cout<<"etelaate daneshjo\n"<<getname()<<getshomaredaneshjo()<<gets en()<<getmoadel()<<endl;
    }

    };
    int main()
    {
    string name0fnamedaneshjo;
    string name0fshomaredaneshjo;
    int name0fsenedaneshjo;
    int name0fmoadeledaneshjo;
    student mystudent;

    cout<<"lotfan etelaate daneshjo ra vared konid:"<<endl;
    getline(cin, name0fnamedaneshjo);
    mystudent.setname(name0fnamedaneshjo);
    getline(cin, name0fshomaredaneshjo);
    mystudent.setshomaredaneshjo(name0fshomaredaneshjo );
    cin>>name0fsenedaneshjo;
    mystudent.setsen(name0fsenedaneshjo);
    cin>>name0fmoadeledaneshjo;
    mystudent.setmoadel(name0fmoadeledaneshjo);
    cout<<endl;
    mystudent.displaymessage();
    getch();
    return 0;
    }


    اصلا از error نترس ، شیرینی برنامه نویسی به همین چیزاشه

  28. #68
    کاربر تازه وارد آواتار majmaji
    تاریخ عضویت
    خرداد 1388
    محل زندگی
    تهران
    سن
    34
    پست
    96

    نقل قول: مشكلات من با ++C

    خوب دوستان تا اینجا خوب پیش رفتیم جا داره از دوست خوبم mabbaszadegan تشکر کنم بخاطر توجه ویژه که به این تاپیک و بنده داشتن و هیچ سوالی از من رو بی پاسخ نذاشتن.
    واقعاً ممنونم
    اما خوبه تا الان با اون چیزایی که آشنا شدیم یه مروری داشته باشیم.
    خوب، داده ها چه چیزایی بودن؟ داده ها متغیر هایی هستن که در طول برنامه با اونا ار داریم و باید قبل از استفاده تعریف بشن
    داده های عضو داده هایی هستن که در یک کلاس به کار میرن و باید قبل از به پایان رسیدن کلاس معرفی بشن.
    تابع هم که فهمیدیم چی بود. پارامتر تابع رو هم فهمیدیم ما با استفاده از پارامتر تابع مقداری رو در یک متغیر کلاس جایگزین میکنیم.
    کلاس رو هم فهمیدیم
    شی رو هم فهمیدم ما با استفاده از شی توابع رو فراخوانی میکنیم
    (دوستان اگه اشتباه بود بگیدا)
    اما در مثال جدید که میخوایم بریم سراغش "سازنده" ها را معرفی کرده.
    سازنده ها به اشیای کلاس ها مقدار اولیه می دهند.

  29. #69
    کاربر تازه وارد آواتار majmaji
    تاریخ عضویت
    خرداد 1388
    محل زندگی
    تهران
    سن
    34
    پست
    96

    نقل قول: مشكلات من با ++C

    قبل از اینکه در مورد برنامه حرف بزنیم بریم سراغ توضیحات قبل از برنامه
    مثال بعدی مربوط میشه به مقدار دادن به اشیا با سازنده ها
    توی توضیحات اینطوری اومده:
    هنگامی که شی GradeBook را ایجاد می کنید چه اتفاقی می افتد اگر بخواهید نام یک درس را فراهم کنید. هر کلاسی که اعلان می کنید می تواند سازنده ای فراهم کند که می تواند برای مقدار اولیه دادن به شی کلاس هنگام ایجاد آن مورد استفاده قرار گیرد.(خوب اینطور که من فهمیدم برای هر کلاس فقط یک سازنده داریم و کار سازنده ها مقدار دادن به اشیاء کلاس هست. آیا تنها کار سازنده همین هست یا باز هم کارایی دیگه ای هم دارد؟)
    سازنده، تابع عضو خاصی است که باید همنام با کلاس تعریف شود از اینرو کامپایلر می تواند آن را از دیگر تابع های عضو کلاس تشخیص دهد. (از اینجا فهمیدیم که سازنده یک تابع است که مثل بقیه توابع میتونه پارامتر و داده عضو داشته باشه و باید همنام کلاس باشه)
    به این بند توجه کنید لطفاً
    زبان ++C برای احضار هر شی ای که ایجاد می شود نیازمند یک یک سازنده است که کمک می کند اطمینان حاصل کنیم شی قبل از استفاده در برنامه، بدرستی مقدار اولیه گرفته .(ما با اشیاء توابع را در تابع main فراخوانی می کردیم و در بقیه توابع به یه صورت دیگه که در مثال قبل دیدیم اما سازنده ها به اشیاء مقدار اولیه میدن این چه تفاوتی میتونه در فراخوانی تابع در تابع main داشته باشه؟)
    قبل از مثال هم یه تذکر نوشته که من یه قسمتایش رو نمیفهمم:
    تذکر: برای داده های عضوی که اشیایی از کلاس های دیگر هستند سازنده پیش فرض به صورت ضمنی هر سازنده ی پیش فرض داده ی عضو را احضار می کند تا مطمئن شود داده عضو به درستی مقدار اولیه گرفته است.(مگه میشه داده های عضوی اسم اشیاء رو هم تشکیل بده؟؟؟؟ یا شاید چون برای کلاس های متفاوت هست اصلا تداخلی ایجاد نمیکنه ؟؟)
    دوستان با تشکر از اهمیتی که به این بحث میدید قبل از اینکه بریم سراغ مثال اول این ابهامات رو رفع کنیم!
    با تشکر

  30. #70
    کاربر دائمی آواتار mabbaszadegan
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    تهران
    پست
    185

    نقل قول: مشكلات من با ++C

    خوب اینطور که من فهمیدم برای هر کلاس فقط یک سازنده داریم و کار سازنده ها مقدار دادن به اشیاء کلاس هست. آیا تنها کار سازنده همین هست یا باز هم کارایی دیگه ای هم دارد؟
    نه ، ممکنه یه کلاس چندین سازنده داشته باشه ؛ اینجا بحث overloading مطرح میشه ، یعنی تابعی با یک اسم چندین بار تعریف بشه ، که این خیلی کاربرد میتونه داشته باشه

    از اینجا فهمیدیم که سازنده یک تابع است که مثل بقیه توابع میتونه پارامتر و داده عضو داشته باشه و باید همنام کلاس باشه
    بله !!

    ما با اشیاء توابع را در تابع main فراخوانی می کردیم و در بقیه توابع به یه صورت دیگه که در مثال قبل دیدیم اما سازنده ها به اشیاء مقدار اولیه میدن این چه تفاوتی میتونه در فراخوانی تابع در تابع main داشته باشه؟
    منظورتو متوجه نمیشم ، خب سازنده به شی مقداردهی میکنه و دقیقا مثل توابع عضو دیگه ی کلاس تو تابع main فراخوانی میشه

    مگه میشه داده های عضوی اسم اشیاء رو هم تشکیل بده؟؟؟؟ یا شاید چون برای کلاس های متفاوت هست اصلا تداخلی ایجاد نمیکنه ؟؟
    میتونی یک عضو داده ای از جنس کلاس تعریف کنی ، مثلا :
     
    class student
    {
    private:
    string name;
    string shomaredaneshjo;
    int sen;
    student std1;
    اینجا std1 علاوه براینکه یک عضو داده ای کلاس student هست ، یک شی ازین کلاس هم به حساب میاد



  31. #71
    کاربر تازه وارد آواتار majmaji
    تاریخ عضویت
    خرداد 1388
    محل زندگی
    تهران
    سن
    34
    پست
    96

    نقل قول: مشكلات من با ++C

    نقل قول نوشته شده توسط mabbaszadegan مشاهده تاپیک
    نه ، ممکنه یه کلاس چندین سازنده داشته باشه ؛ اینجا بحث overloading مطرح میشه ، یعنی تابعی با یک اسم چندین بار تعریف بشه ، که این خیلی کاربرد میتونه داشته باشه


    بله !!


    منظورتو متوجه نمیشم ، خب سازنده به شی مقداردهی میکنه و دقیقا مثل توابع عضو دیگه ی کلاس تو تابع main فراخوانی میشه
    خوب در مثال قبلی ما به جا اینکه به شی مقدار بدیم تابع رو فراخونی میکردیم و با cout مقدار رو چاپ میکردیم ولی الان با سازنده میتونیم مقدار بدیم. منظورم همین بود که فقط با استفاده از سازنده برنامه چند خط کمتر میشه

    میتونی یک عضو داده ای از جنس کلاس تعریف کنی ، مثلا :
     
    class student
    {
    private:
    string name;
    string shomaredaneshjo;
    int sen;
    student std1;
    اینجا std1 علاوه براینکه یک عضو داده ای کلاس student هست ، یک شی ازین کلاس هم به حساب میاد
    خوب اینجا شما فقط سه تا داده به نام name، shomaredaneshjo، sen و یک شی به نام std1 تعریف کردی اما داده ای با نام std تعریف نکردی

    خوب اینجا شما فقط سه تا داده به نام name، shomaredaneshjo، sen و یک شی به نام std1 تعریف کردی اما داده ای با نام std تعریف نکردی

  32. #72
    کاربر دائمی آواتار mabbaszadegan
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    تهران
    پست
    185

    نقل قول: مشكلات من با ++C

    std1 هم یک شی به حساب میاد هم یک عضو داده ای ؛ مثلا توی تابع main میتونی بنویسی :
    student obj;
    obj.std1.sen;


    اینجور تعریف کردن معمولا برای ساختن ساختمان داده (مثل لینک لیست یا درخت و گراف ) کاربرد داره

  33. #73
    کاربر تازه وارد آواتار majmaji
    تاریخ عضویت
    خرداد 1388
    محل زندگی
    تهران
    سن
    34
    پست
    96

    نقل قول: مشكلات من با ++C

    خوب این هم مثال بعدی که مربوط میشه به مقدار دادن به اشیا با استفاده از سازنده ها
    #include <cstdlib>
    #include <iostream>
    #include <conio.h>
    #include <string>

    using namespace std;

    class GradeBook
    {
    public:
    GradeBook( string name )
    {
    setCourseName( name );
    }
    void setCourseName( string name )
    {
    coursename = name;
    }
    string getCourseName()
    {
    return coursename;
    }
    void displaymessage()
    {
    cout <<"welcome to the grade book for\n" << getCourseName() << endl;
    }
    private:
    string coursename;
    };
    int main()
    {
    GradeBook gradebook1( "cs101 introduction to C++‎ programing" );
    GradeBook gradebook2( "cs102 data structures in C++‎" );

    cout << "grade book1 created for course:" << gradebook.getCourseName() << "\ngradebook2 created for course:" << gradebook2.getCourseName() << endl;
    getch();
    return 0;
    }

    خوب من میخوام تفسیر کنم ببینم تا اینجا تونستم خوب بفهمم یا نه

    خوب چند خط اول که فایل های سرآیند مورد نیاز برنامه است از فضای نام std هم چون در برنامه استفاده می کنیم باید تعریف شه
    بعد کلاس GradeBook معرفی میشه. بعد از اون سازنده ای همنام با نام کلاس ایجاد میشه، این سازنده یک پارامتر به نام string name داره و درونش یک داده عضو داره (البته چرا داده عضو یک پارامتر داره؟ مگه اون داده نیست پس چرا پارامتر داره؟) بعد از معرفی سازنده تابع setcoursename از نوع void و با پارامتر string name معرفی میشه کار این تابع اینه که نام درس رو در متغیر name ذخیره کنه. تابع بعدی getcoursename هست از نوع string که هیچ پارامتری نداره کار این تابع اینه که تابع setcoursename رو برگردونه و بعد از اینا تابع displaymessage معرفی میشه کار این تابع اینه که پیغام خوشامد گویی رو چاپ کنه و نام درسا رو معرفی کنه
    بعد از اینا و قبل از اینکه کلاس به پایان برسه متغیرایی که باهاشون سر و کار داریم با دسترسی private معرفی میشن
    بعد از پایان کلاس تابع main با این هدف ایجاد میشه که 3 تابع بالا موجود در کلاس رو تست کنه
    2 تا شی با مقداری که دارن معرفی میشن و در خط آخر چاپ میشن
    (خوب دوستان این توضیحات کامل هستن؟ یه سوال هم خودم بپرسم در مثال قبلی قبل از پایان برنامه یه دستوری بود که اینجوری بود mygradebook.displaymessage() اما تو این مثال از این دستور استفاده نشده چرا؟)

  34. #74
    کاربر دائمی آواتار mabbaszadegan
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    تهران
    پست
    185

    نقل قول: مشكلات من با ++C

    (البته چرا داده عضو یک پارامتر داره؟ مگه اون داده نیست پس چرا پارامتر داره؟)
    اون داده نیست ، همون تابع عضو setcoursename هستش که داخل سازنده صدا زده شده

    در مثال قبلی قبل از پایان برنامه یه دستوری بود که اینجوری بود mygradebook.displaymessage() اما تو این مثال از این دستور استفاده نشده چرا؟)
    اینجا اومده به جای استفاده از تابع displaymessage خودش مستقیما تو تابع main شی رو چاپ کرده
    تو این مثال اگه تابع displaymessage رو حذف کنی هیچ اتفاقی نمی افته

  35. #75
    کاربر تازه وارد آواتار majmaji
    تاریخ عضویت
    خرداد 1388
    محل زندگی
    تهران
    سن
    34
    پست
    96

    نقل قول: مشكلات من با ++C

    ممنونم محمد جان حالا بعد از این مثال هم یک سری توضیحات اورده که با هم بررسی میکنیم
    میگه در لیست پارامتر یک سازنده، داده هایی مشخص می شود که سازنده برای انجام کارهایش به آن نیاز دارد. خوب اینجا پارامتر string name یا بهتره بگیم پارامتر name از نوع string مشخص شده.
    میگه در بدنه سازنده، name یعنی پارامتر سازنده را به تابع setcoursename منتقل می کند که یک مقدار در داده عضو coursename جایگزین کند خوب اینجا ما یک حرکت اضافی انجام دادیم چون تابع setcoursename خودش اینکار رو انجام میده درسته؟
    و بعد از همه اینا اگه میشه بگو که آرگومان یعنی چی؟
    و این جمله یعنی چی: هر سازنده ای که هیچ آرگومانی نداشته باشد سازنده پیش فرض نام دارد
    میگه سازنده پیش فرض به دو صورت در اختیار کلاس قرار میگیره
    1- کامپایلر در کلاسی که سازنده ای تعریف نکرده به صورت ضمنی سازنده پیش فرض رو ایجاد کنه و ....
    2- برنامه نویس خودش به صورت صریح ایجاد کنه
    البته من اولی رو بیشتر ترجیح میدم اما خودش یک نکته ای رو اورده با این موضوع "اگر لازم نباشد به داده های عضو کلاس مقدار اولیه دهید (تقریبا همیشه) برای حصول اطمینان از اینکه داده های عضو کلاس، هنگام ایجاد هر شی جدید از کلاستان، با مقادیر با معنی مقدار اولیه گرفته اند، یک سازنده فراهم سازید" این یعنی اینکه باید از راه دوم بریم؟؟؟



  36. #76
    کاربر دائمی آواتار mabbaszadegan
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    تهران
    پست
    185

    نقل قول: مشكلات من با ++C

    اینجا ما یک حرکت اضافی انجام دادیم چون تابع setcoursename خودش اینکار رو انجام میده درسته؟
    این کار برای افزایش امنیت برنامه ست ، اصل کپسوله سازی capsulation
    آرگومان یعنی چی؟
    آرگومان به مقادیری میگند که تابع میگیره ، مثلا توی این :
    void func1(int a, int b , char c, string d)

    a,b,c,d به ترتیب آرگومانهای تابع func1 به شمار میاند ؛ یعنی موقع فراخوانی تابع باید این چهار مقدار رو وارد کنی
    البته تابع میتونه هیچ آرگومانی نداشته باشه (مثل همین displaymessage یا توابع get )

    هر سازنده ای که هیچ آرگومانی نداشته باشد سازنده پیش فرض نام دارد
    یعنی اینکه اگه هیچ سازنده ای رو تو تابع main صدا نزنی ، به طور اتوماتیک سازنده ای که هیچ آرگومانی ندارد فراخوانی شده و شی مورد نظر رو مقداردهی میکند


    کلا تعریف سازنده باعث بالارفتن امنیت برنامه میشه ؛


    یه نکته : یه سری اصول هست که شاید به ظاهر مسخره بیاد (مثل همین سازنده یا تعریف کلاس توی بلاکهای #ifndef و #endif) ولی در حقیقت برنامه رو اصولی تر میکنه و از همه مهم تر به برنامه قابلیت حمل میده

  37. #77
    کاربر تازه وارد آواتار majmaji
    تاریخ عضویت
    خرداد 1388
    محل زندگی
    تهران
    سن
    34
    پست
    96

    نقل قول: مشكلات من با ++C

    a,b,c,d به ترتیب آرگومانهای تابع func1 به شمار میاند ؛ یعنی موقع فراخوانی تابع باید این چهار مقدار رو وارد کنی
    البته تابع میتونه هیچ آرگومانی نداشته باشه (مثل همین displaymessage یا توابع get )
    خوب تو این مثال که زدی a,b,c,d مگه پارامتر های تابع نیستن؟
    تازه اگه اینها آرگومان باشن ما میتونیم داخل تابع به کار ببریم؟
    مثلا بنویسیم:
    void func1 ()
    {
    int a, b;
    char c;
    string d;
    }

  38. #78
    کاربر دائمی آواتار mabbaszadegan
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    تهران
    پست
    185

    نقل قول: مشكلات من با ++C

    درسته ، تو اولی برنامه نویس آرگومانها رو به تابع میده ولی در حالت دوم کاربر آرگومانها رو مقداردهی میکنه

  39. #79
    کاربر تازه وارد آواتار majmaji
    تاریخ عضویت
    خرداد 1388
    محل زندگی
    تهران
    سن
    34
    پست
    96

    نقل قول: مشكلات من با ++C

    من دو تا پست گذشتم اومدم آخری رو حذف کنم یکی مونده به آخری حذف شد اشکال نداره دوباره مینویسم:
    تو پست دو تا قبلی نوشته بودم که مثال بعدی مربوط میشه به گنجاندن سر فایلی که حاوی یک کلاس تعریف شده توسط کاربر است در این مثال اینطوری عمل میشه که ما اول میام کلاس رو در یک برنامه مینویسیم بدون تابع main و در برنامه ای دیگه میام تابع main رو مینویسیم بعلاوه یک فایل سر آیند به این شکل:
    #include "gradebook.h"
    این هم برنامه ها به ترتیب
    #include <cstdlib>
    #include <iostream>
    #include <conio.h>
    #include <string>

    using namespace std;
    class GradeBook
    {
    public:
    GradeBook(string name)
    {
    setcoursename(name);
    }
    void setcoursename(string name)
    {
    coursename = name;
    }
    string getcoursename()
    {
    return coursename;
    }
    void displaymessage()
    {
    cout << "welcome to the gradebook for\n" << getcoursename() << "!" << endl;
    }
    private:
    string coursename;
    };

    و برنامه بعدی که تابع main هست:
    #include <cstdlib>
    #include <iostream>
    #include <conio.h>
    #include <string>
    #include "GradeBook.h"

    using namespace std;


    int main()
    {
    GradeBook gradebook1( "cs101 introduction to C++‎ programing" );
    GradeBook gradebook2( "cs102 data structures in C++‎" );

    cout << "grade book1 created for course:" << gradebook1.getCourseName() << "\ngradebook2 created for course:" << gradebook2.getCourseName() << endl;
    getch();
    return 0;
    }

    یه سوال: چرا سر فایل ها در هر دو برنامه نوشته میشه؟
    یه سوال دیگه در مورد توضیحات کتاب در کتاب نوشته:
    "در بخش بعدی نشان می هیم که چگونه کلاس gradebook را میتوانید به دو فایل طوری تقسیم کنید که:
    1- کلاس دارای قابلیت استفاده مجدد باشد
    2- مشتری های کلاس بدانند کلاس، چه توابع عضوی فراهم می سازد و چگونه آنها را احضار می سازد و انتظار چه نوع داده برگشتی را دارد
    3- مشتری ها ندانند چگونه توابع عضو کلاس پیاده سازی می شوند."
    من منظور کتاب رو از این توضیحات نفهمیدم منظورش چیه میشه توضیح بدید لطفاً

  40. #80
    کاربر دائمی آواتار clover
    تاریخ عضویت
    خرداد 1388
    محل زندگی
    اصفهان - اراک
    پست
    646

    نقل قول: مشکلات من با ++C

    چرا سر فایل ها در هر دو برنامه نوشته میشه؟
    سر فایل ها در هر جایی که نیاز باشد باید نوشته شوند، اما اینکه چرا با وجود نوشتن سر فایل ها در فایل GradeBook.h باز هم در فایل اصلی آنها را می نویسیم، علت این است که ممکن است شما زمانی احساس کنید نیاز به استفاده از کلاس GradeBook ندارید و تصمیم به حذف سرفایل مربوطه بگیرید، اگر سرفایل های دیگر را در تابع main هم تعریف کرده باشید مشکلی برای برنامه به وجود نخواهد آمد اما در غیر این صورت باید تمام سرفایل هایی که با حذف سرفایل GradeBook.h از برنامه حذف می شوند را اضافه کنید (و همینطور باید تمام برنامه را چک کنید تا بفهمید کدام سرفایل برای تابع main مورد نیاز بوده و کدام یک فقط برای کلاس مورد نظر و...) و این برای پروژه های بزرگ یعنی فاجعه.
    اما برای جلوگیری از تعریف چند باره ی کلاس ها و عناصر تعریف شده در سرفایل ها می توانید کد موجود در فایل GradeBook.h را به این شکل تغییر دهید:
    #ifndef GRADEBOOK_H
    #define GRADEBOOK_H

    #include <cstdlib>
    #include <iostream>
    #include <conio.h>
    #include <string>

    using namespace std;
    class GradeBook
    {
    public:
    GradeBook(string name)
    {
    setcoursename(name);
    }

    void setcoursename(string name)
    {
    coursename = name;
    }

    string getcoursename()
    {
    return coursename;
    }

    void displaymessage()
    {
    cout << "welcome to the gradebook for\n" << getcoursename() << "!" << endl;
    }

    private:
    string coursename;
    };

    #endif


    ifndef GRADEBOOK_H# : اگر شناسه GRADEBOOK_H قبلا تعریف نشده است.
    define GRADEBOOK_H# : شناسه GRADEBOOK_H را تعریف کن و بقیه دستورات را تا رسیدن به پایان شرط اجرا کن.
    endiF#‎ : پایان شرط.

    با اضافه کردن این دستورات در اولین فراخوانی سرفایل GradeBook.h (ز مانی که هنوز شناسه ای با نام GRADEBOOK_Hتعریف نشده است) شناسه ی GRADEBOOK_H تعریف شده و کدهای داخل بلاک شرطی اجرا می شوند و در دفعات بعد به دلیل برقرار نبودن شرط از اجرای کد ها جلوگیری می شود.

    در بخش بعدی نشان می هیم که چگونه کلاس gradebook را میتوانید به دو فایل طوری تقسیم کنی
    به این کار می گویند جداسازی رابط از پیاده سازی. یعنی ما در بدنه ی کلاس (در فایل GradeBook.h) فقط توابع را ا اعلان کنیم و پیاده سازی توابع را در یک فایل جداگانه (مثلا GradeBook.cpp) انجام دهیم. در حال حاضر ممکن است این کار به نظرتان مسخره بیاید، پیشنهاد می کنم در مورد علت انجام این کار و مزایای آن فعلا زیاد کنجکاوی نکنید، فقط از آن پیروی کنید. به زودی (هنگام نوشتن و مدیریت پروژه های بزرگتر و یا تجاری) به مزایای این کار پی خواهید برد.
    آخرین ویرایش به وسیله clover : شنبه 19 دی 1388 در 16:15 عصر

صفحه 2 از 5 اولاول 1234 ... آخرآخر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •