mengakses anggota objek anak ketika berada dalam vektor dasar [duplikat]

Jan 20 2021

Saat ini saya mengalami masalah dalam mengakses anggota objek anak ketika berada dalam vektor dasar, saya tahu itu adalah masalah pemotongan objek, saya mencoba menggunakan transmisi dinamis tetapi saya seorang pemula dan saya tidak terlalu yakin dengan sintaks atau cara menggunakan itu, bantuan apa pun akan dihargai dengan pseudocode:

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

Jawaban

Jeffrey Jan 20 2021 at 07:47

Teknik pertama adalah mengandalkan fungsi virtual:

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

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

Kemudian, items[0]->doStuff()akan memanggil versi turunan.

Teknik kedua adalah downcast:

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

Ini akan memberi Anda salah satu nullptratau penunjuk objek Berasal Anda. Masalahnya adalah, Anda harus mengiklankan fungsi virtual agar ini berfungsi.