如何区分派生类C++的对象

syd*_*dgm 3 c++ inheritance

看下面的代码:

class A
{
protected:
    int aa = 1;
};

class B : public A
{
private:
    int bb = 2;
public:
    int getbb() { return bb; }
};

class C : public A
{
private:
    int cc = 3;
public:
    int getcc() { return cc; }
};

int main()
{
    std::vector<A> a;
    B b;
    C c;
    a.push_back(b);
    a.push_back(c);

    a[0].getbb(); //getbb() unaccessible;
    a[1].getcc(); //getcc() unaccessible;
}
Run Code Online (Sandbox Code Playgroud)

A是基础课.B并且C是派生类.我想设置一个向量来保持B或者C,并使用向量a来保持A.但是,由于a是包含A对象的向量,我无法访问B和中的方法C.反正有没有制作a[0].getbb()a[1].getcc()工作?

das*_*ght 8

你的向量A不能保存Bs或Cs,因为它A按值存储,导致在存储或存储时对象切片.特别是,这意味着当你存储时,只会被存储; 被切掉了.BCBaabb

为了存储没有切片的子类,使用指针容器 - 最好是智能指针.

这不会帮助您访问特定于BC不具有强制转换的功能.解决这个问题的方法之一是给成员函数B的和C的功能A,并通过电话A的-typed引用BC.