۱۳ مطلب با کلمه‌ی کلیدی «oop» ثبت شده است

ارث بری در کلاس ها (inheritance)

سلام!

این جلسه می خواهیم وارد مبحث خیلی مهم (خیلی مهم) و جدیدی در برنامه نویسی شی گرا شویم. این مبحث، ارث بری نامیده می شود.

فرض کنید می خواهید برنامه ای بنویسید که قرار است در آن از شکل های هندسی (مثل مربّع، مستطیل و...) استفاده کنید. تمام شکل های هندسی در یک چیز مشترکند؛ در شکل بودن. هم مربّع یک شکل است، هم مستطیل یک شکل است و هم تمام شکل های دیگر.

حالا باید با دو مفهوم Base class (کلاس پایه) و Derived class (کلاس مشتق شده) آشنا شوید. به کلاسی مانند کلاس Shape (در مثال بالا) یک کلاس پایه یا Base class می گویند. به کلاس های مربّع، مستطیل و... کلاس های وارث، مشتق شده یا Derived class می گویند.

۰ نظر موافقین ۰ مخالفین ۰
روزبه صیادی

آموزش ایجاد یک Makefile

سلام!

جلسه ی پیش با فایل هایی با پسوند o (مثل Point.o) آشنا شدیم. حالا می خواهیم برنامه ای بنویسیم که خودش به صورت خودکار تمامی کد ها را کامپایل کند. برای این کار باید ابتدا برنامه ای به نام make را نصب کنیم. برای نصب این برنامه در Ubuntu باید دستور زیر را در Terminal وارد کنید؛

sudo apt-get install make

حالا باید برنامه ای سازگار با این برنامه بنویسیم. بعد از این که این کار را انجام دادیم، دیگر لازم نیست همه ی دستور های لازم را برای کامپایل بنویسیم بلکه تنها وارد Folder برنامه ها شده و در Terminal می نویسیم:

make

همین برای کامپایل کامل برنامه کافی خواهد بود. حال بیایید به طرز نوشتن فایل Makefile بپردازیم.

۱ نظر موافقین ۱ مخالفین ۰
روزبه صیادی

سربارگذاری عمل گر ها (operator overloading) - قسمت چهارم

سلام!

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

وقتی که یک عمل گر را درون بدنه ی class تغییر می دهید، ورودی اوّل آن به صورت پیش فرض یک object از نوع همان class است که درون آن هستیم. مثلا فرض کنید می خواهید عمل گر += را برای Point (که کد آن را طی جلسات پیش تا جای خوبی پیش بردیم) تغییر دهید. برای انجام این کار در درون کلاس باید بنویسید

void operator+=(const Point&);
۰ نظر موافقین ۰ مخالفین ۰
روزبه صیادی

سربارگذاری عمل گر ها (operator overloading) - قسمت دوم

سلام!

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

فرض کنید می خواهیم عمل گر += را پیاده سازی کنیم. برای این کار باید از متغیرهای مرجع استفاده کنیم. می توانید کد مربوط به آن را در کد زیر ببینید.

۰ نظر موافقین ۰ مخالفین ۰
روزبه صیادی

پاسخ تمرین های سری قبل

سلام!

پاسخ تمرین سری قبل را می توانید در این جا مشاهده نمایید.

۰ نظر موافقین ۰ مخالفین ۰
روزبه صیادی

سربارگذاری عمل گر ها (operator overloading)

سلام!

در این جلسه قرار است در رابطه با عمل گر ها نکاتی را یاد بگیرید و چگونگی تغییر آن ها را بیاموزید.

فرض کنید یک class به نام Point نوشته اید که شامل دو مؤلّفه (x و y) است. این کار را جلسه ی پیش انجام دادید. اگر انجام ندادید می توانید از کد زیر استفاده کنید.

#include <iostream>
#include <cstdio>

using namespace std;

class Point{
    
    friend void set(Point*, int = 0, int = 0);

    private:

        int _x, _y;
        
        void setX(int);
        void setY(int);
    
    public:

        Point(int = 0, int = 0);

        int x() const;
        int y() const;

};

Point::Point(int x, int y){
    set(this, x, y);
}

void Point::setX(int x){
    this->_x = x;
}

void Point::setY(int y){
    this->_y = y;
}

int Point::x() const{
    return this->_x;
}

int Point::y() const{
    return this->_y;
}

void set(Point *point, int x, int y){
    point->setX(x);
    point->setY(y);
}

int main(){
    int x, y;
    scanf("%d %d", &x, &y);
    Point point(x, y);
    printf("X: %d\nY: %d\n", point.x(), point.y());
    return 0;
}

۰ نظر موافقین ۰ مخالفین ۰
روزبه صیادی

پاسخ تمرین های سری قبل

سلام!

پاسخ سوال های تمرین سری قبل را می توانید در ادامه ی مطلب مشاهده نمایید.

۰ نظر موافقین ۰ مخالفین ۰
روزبه صیادی