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

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

سلام!

این جلسه می خواهیم عمل گر های ++ و -- را هم به صورت پیشوندی (prefix) و هم به صورت پسوندی (postfix) سربارگذاری کنیم.

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

#include <iostream>

using namespace std;

int main(){
    int a = 0;
    cout << a++ << endl;
    return 0;
}

#include <iostream>

using namespace std;

int main(){
    int a = 0;
    cout << ++a << endl;
    return 0;
}

متوجه می شوید که اگر عمل گر ++ به صورت پیشوندی ظاهر شود، مقدار اضافه شده را برمی گرداند و اگر به صورت پسوندی استفاده شود، مقدار قبلی متغیر را برمی گرداند. این توضیح برای عمل گر -- هم صدق می کند.

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

سربارگذاری عمل گر ها (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;
}

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

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

سلام!

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

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

دوستی در کلاس ها (friendship)

سلام!

این مبحث‌ (مثل مباحث قبلی) مهم است؛ بنابراین دقت کنید.

این جلسه قرار است به مبحث دوستی در کلاس ها بپردازیم. با کمک این مفهوم شما می توانید به یک class اجازه بدهید که به عضوهای private (و protected) یک class دیگر دسترسی داشته باشد. مثلا فرض کنید که یک class دارید به نام A. برای این که به یک class (مثل B) اجازه بدهید که به عضوهای private و protected ازA دسترسی داشته باشد، می توانید در A بنویسید:

friend class B;

معنی این خط کد این است: یک class به نام B وجود دارد که دوست من است و می تواند از تمامی عضوهای من استفاده کند.

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

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

سلام!

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

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

ثابت ها (const ها)

سلام!

این جلسه به مبحثی می پردازیم که فقط مربوط به class نیست و ابعاد وسیع تری را در بر دارد.

به متغیری متغیر ثابت یا const گفته می شود که مقدار آن در طول برنامه قابل تغییر نیست و فقط مقداردهی اولیه را می پذیرد. مثلا شما می خواهید برنامه ای بنویسید که عددی را به عنوان شعاع ورودی بگیرد و مساحت دایره ای با آن شعاع را حساب کند. برای این کار شما به عدد پی نیاز دارید. برای این کار می نویسید:

int pi = acos(-1);
۰ نظر موافقین ۰ مخالفین ۰
روزبه صیادی

تابع مخرب (destructor)

سلام!

موضوع این جلسه، تابع مخرب یا destructor است.

قبل از این جلسه با مفهوم constructor آشنا شدیم و دانستیم که constructor تابعی است که وقتی یک object از یک class بسازیم، صدا زده می شود و می توانیم در آن مقداردهی های اولیه را انجام دهیم.

حالا destructor تابعی است که وقتی یک object حذف می شود، صدا زده می شود. حالا این سوال پیش می آید که یک object چه وقت هایی حذف می شود؟ فرض کنید یک object معمولی (نه static) در یک scope (بین begin و end) ساخته اید. وقتی آن scope تمام شود، object های ساخته شده در آن scope نیز پاک می شوند. دستور delete هم باعث پاک شدن یک object می شود.

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