Up cast و Down cast با std::shared_ptr - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

وبـــلاگ هــفت خــط کــد


آموزش های برنامه نویسی
۲۰۴ نفر آنلاین
۴۲ عضو و ۱۶۲ مهمان در سایت حاضرند

Up cast و Down cast با std::shared_ptr

0 امتیاز
سلام.

فرض کنید کلاس base و derived دارید چطور به هم کست میشن؟
سوال شده تیر 23, 1397  بوسیله ی sailent (امتیاز 355)   16 44 59

1 پاسخ

0 امتیاز
#include <iostream>
#include <memory>
 
struct Base 
{ 
    int a; 
    virtual void f() const { std::cout << "I am base!\n";}
    virtual ~Base(){}
};
 
struct Derived : Base
{
    void f() const override
    { std::cout << "I am derived!\n"; }
    ~Derived(){}
};
 
int main(){
    auto basePtr = std::make_shared<Base>();
    std::cout << "Base pointer says: ";
    basePtr->f();
 
    auto derivedPtr = std::make_shared<Derived>();
    std::cout << "Derived pointer says: ";
    derivedPtr->f();
 
    // static_pointer_cast to go up class hierarchy
    basePtr = std::static_pointer_cast<Base>(derivedPtr);
    std::cout << "Base pointer to derived says: ";
    basePtr->f();
 
    // dynamic_pointer_cast to go down/across class hierarchy
    auto downcastedPtr = std::dynamic_pointer_cast<Derived>(basePtr);
    if(downcastedPtr)
    { 
        std::cout << "Downcasted pointer says: ";
        downcastedPtr->f(); 
    }
 
    // All pointers to derived share ownership
    std::cout << "Pointers to underlying derived: " 
            << derivedPtr.use_count() 
            << "\n"; 
}

 

پاسخ داده شده تیر 23, 1397 بوسیله ی مصطفی ساتکی (امتیاز 21,998)   24 34 75
دوباره نشان داده شد تیر 23, 1397 بوسیله ی مصطفی ساتکی
...