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]
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
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 nullptr
hoặ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.