شی گرایی در سی پلاس پلاس (Object Oriented)

در این قسمت تیم کدگیت را با آموزش شی گرایی در سی پلاس پلاس همراهی کنید. در این آموزش ابتدا شی گرایی را معرفی میکنیم. در ادامه کلاس و شی را توضیح داده و در آخر مثالی را پیاده سازی می‌کنیم. پیشنهاد می‌شود آموزش‌های ابتدایی سی پلاس پلاس را قبل از ادامه این آموزش، مطالعه کنید.

شی گرایی

همه چیز در مورد اشیا است. همانطور که اشیا در دنیای واقعی رفتار میکنند، در دنیای نرم افزار نیز همانگونه اند. اشیا در یک برنامه تقریبا همه کار را انجام میدهند. به عنوان مثال ماشین ها شتاب میگیرند یا انسان ها راه میروند(انسان نیز یک شی است) یا هواپیماها پرواز میکنند و ماهی ها شنا میکنند. به طور مشابه ما در نرم افزار نیز ما اشیایی میسازیم که رفتاری خاص را انجام میدهند. و ما از آن برنامه انتظار داریم که رفتارهای اشیا را انجام دهند(راه رفتن، پرواز کردن …). پس موقعی که  نرم افزار ما اجرا میشود اشیا ما به وجود می آیند.

کلاس‌ها و شی‌ها در سی پلاس پلاس

کلاس‌ها چکیده‌ای از اطلاعات هستند یا به زبان دیگر یک طرح کلی (Blueprint) از نوع دادها هستند. البته خود کلاس یک نوع داده (data type) نیست اما یک طرح کلی بوده از این که شی ساخته شده از کلاس شامل چه عملیات‌هایی(Function) بوده و چه اطلاعاتی در آن ذخیره می‌شود.

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

بیشتر بخوانید:  خواندن فایل در سی پلاس پلاس (File in Cpp)

برای تعریف کلاس در سی پلاس پلاس از فرمت زیر استفاده می‌شود:

همانطور که می‌بینید در کد بالا کلاسی به نام Box ساخته‌ایم. بعد از آن کلمه کلیدی Public به کار رفته که نشان دهنده سطح دسترسی به متغیر است. Public به بقیه کلاس ها توابع این اجازه می‌دهد که به متغیرهای کلاس Box دسترسی داشته باشید (البته با داشتن شی این کلاس).

برای تعریف شی در سی پلاس پلاس از فرمت زیر استفاده می‌شود:

در بالا دو شی از جنس Box ساختیم. این اشیا هر کدام درون حافظه، متغیر‌ها و توابع خود را دارند و در حافظه‌ به صورت جداگانه ذخیره می‌شوند.  در آموزش‌های آینده بیشتر در این مورد صحبت خواهیم کرد.

مثال شی گرایی در سی پلاس پلاس

در این قسمت برای درک بهتر از مفهوم شی گرایی در سی پلاس پلاس مثالی را ذکر می‌کنیم. در این مثال کلاسی به نام Person ساخته و یک متغیر person name و یک تابع به نام printname در آن تعریف می‌کنیم. کد این کلاس به صورت زیر است:

بیشتر بخوانید:  this در سی شارپ (this keyword in csharp)

در کد بالا ما جندین مطلب جدید آورده‌ایم:

  1. چگونه یک تابع را در یک کلاس بنویسیم؟ در بالا متد printname را مشاهده کنید.
  2. چگونه یک متغیر عمومی را در کلاس تعریف کنیم؟ متغیر personname را در کد بالا مشاهده کنید.
  3. چگونه از main یک شی از کلاس بسازیم؟ متغیر Obj1 را مشاهده کنید.
  4. چگونه به متغیر ها و توابع یک شی از تابع main دسترسی داشته باشیم؟ دو خط آخر main را مشاهده کنید.

در آموزش‌های بعدی توضیحات کاملتری در مورد شی گرایی در سی پلاس پلاس خواهیم داد.

    پسورد: www.codegate.ir

    8 c دیدگاه

    • یوسف

      سوال:ارایه ای از کلاس دانشجو تعریف کرده و با دادن مقدار به ویژگی شماره دانشجویی اعضا این آرایه را چاپ کند
      ميشه شبه کد اينو بزارید لطفا

      • سعید غریبی

        سلام. در آموزش بالا کلاس Person را ساخته و ویژگی Personname در آن مقدار دهی کردیم. دقیقا همین فرآیند برای سوال شما صدق می کند. تنها تفاوت ایجاد یک آرایه از کلاس Person است.

    • سحر

      با سلام اگر دو تا رشته رو بخوایم به هم بچسبونیم و از کلاس استفاده کنیم کدش چطوری میشه؟!
      از تابع strcatباید استفاده کنم ولی کدم درست نمیشه هرکاری میکنم اگر میشه راهنماییم کنید ممنون

      • سعید غریبی

        سلام. پیشنهاد می کنم کد زیر توی برنامه خود استفاده کنید.
        char src[50], dest[50];

        strcpy(src, “This is source”);
        strcpy(dest, “This is destination”);

        strcat(dest, src);

        printf(“Final destination string : |%s|”, dest);
        این کد تست شده است.

        • سحر

          #include
          #include
          using namespace std;
          class str{
          friend str operator+(const str&,const str&);
          private:
          string k;
          public:
          str& operator=(const str& r);
          str(string n){
          k=n;
          }c
          void print(){
          cout<<k;
          }
          };
          str operator+(const str& s,const str& l){
          str ans=s+l;
          return ans;
          }
          int main()
          {
          str str1("hello"),str2(" world"),s;
          s=str1+str2;
          s.print;
          return 0;
          }
          من این کدو نوشتم ولی اخطار میده مشکلشو نمیفهمم

          • سعید غریبی

            سعی کنید خطا رو پیدا کنید یا در یک کامپایلر آنلاین کد رو اجرا کنید. من از کد شما بدین صورت نمی تونم نتیجه گیری مناسبی کنم.

    • h

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

      • سعید غریبی

        سلام. فرض کنید کلاسی به نام person داریم و می خواهیم آرایه ای از اشیا به کمک person ایجاد کنیم:
        Person[] p = new Person[10];
        ()p[0] = new Person;
        ()p[1] = new Person;
        کد بالا ما آرایه ای از Person ساختیم و دو خانه اول و دوم آرایه ما مقدار دهی شده اند. برای فرخوانی شی اول آرایه کافیه p[0] رو صدا برنی تا به این شی دسترسی پیدا کنی.
        اگر می خواهید به کل آرایه دسترسی داشته باشید باید یک حلقه for بر روی آرایه بنویسید تا بتونید به همه آرایه دسترسی پیدا کنید.

    دیدگاهتان را بنویسید

    نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *