truy cập một thành viên của một đối tượng con khi nó nằm trong một vectơ cơ sở [trùng lặp]

Jan 20 2021

Tôi thực sự đang gặp sự cố khi truy cập thành viên của một đối tượng con khi nó nằm trong một vectơ cơ sở, tôi biết đó là sự cố cắt đối tượng, tôi đang cố gắng sử dụng tính năng truyền động nhưng tôi là người mới bắt đầu và không thực sự chắc chắn về cú pháp hoặc cách sử dụng nó, bất kỳ trợ giúp nào sẽ được đánh giá cao mã giả:

class Base {}

Class Derived : public base {

bool A

}

std::vector<Base*> items;

Item* i = new Derived(constructor);

items.push_back(i);

// items[0]->A isnt accessible due to object slicing

Trả lời

Jeffrey Jan 20 2021 at 07:47

Kỹ thuật đầu tiên là dựa vào các hàm ảo:

class Base 
{
    public:
    virtual int doStuff();
}

Class Derived : public base 
{
    public:
    virtual int doStuff();
}

Sau đó, items[0]->doStuff()sẽ gọi phiên bản dẫn xuất.

Kỹ thuật thứ hai là hạ thấp:

dynamic_cast<Derived*>(items[0]);

Điều này sẽ cung cấp cho bạn một nullptrhoặc con trỏ đối tượng Derived của bạn. Vấn đề là, bạn sẽ cần phải quảng cáo một chức năng ảo để tính năng này hoạt động.