۱۵ مطلب با کلمه‌ی کلیدی «object oriented» ثبت شده است

تغییر عضوهای کلاس پایه از طریق کلاس وارث

سلام!

در این جلسه می خواهیم توابع موجود در کلاس پایه و سطح دسترسی به عضوهای کلاس پایه را تغییر دهیم.

فرض کنید در کلاس پایه ی خود یک تابع به نام test دارید و در کلاس وارث چنین تابعی ندارید. اگر در برنامه ی خود بنویسید

Derived_Obj.test();

کامپایلر ابتدا در خود کلاس وارث دنبال تابع test می گردد و اگر پیدا نکند، در زنجیره ی ارث بری به سمت بالا حرکت می کند تا چنین تابعی را پیدا کند. حالا کد زیر را در نظر بگیرید. همان طور که می بینید، تابع identify را چه با کلاس پایه و چه با کلاس وارث صدا بزنیم، یک تابع صدا زده می شود و آن هم تابع identify در کلاس پایه است.

#include <iostream>

using namespace std;

class Base{
    protected:
        
        int foo;
    
    public:
        
        Base( int value = 0 ) : foo( value ) {}
        
        void identify();
        
};

void Base::identify(){
    cout << "Base!\n";
}

class Derived : public Base{
    public:
        
        Derived( int value = 0 ) : Base( value ) {}
        
};

int main(){
    Base base;
    base.identify();
    
    Derived derived;
    derived.identify();
}

این نکته که بدیهی بود، حالا می خواهیم این تابع را تغییر دهیم.

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

سربارگذاری عمل گر ها (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) - قسمت دوم

سلام!

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

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

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

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

سلام!

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

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

سربارگذاری عمل گر ها (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 وجود دارد که دوست من است و می تواند از تمامی عضوهای من استفاده کند.

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