看下面的代码:
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()工作?
你的向量A不能保存Bs或Cs,因为它A按值存储,导致在存储或存储时对象切片.特别是,这意味着当你存储时,只会被存储; 被切掉了.BCBaabb
为了存储没有切片的子类,使用指针容器 - 最好是智能指针.
这不会帮助您访问特定于B或C不具有强制转换的功能.解决这个问题的方法之一是给虚成员函数B的和C的功能A,并通过电话A的-typed引用B或C.
| 归档时间: |
|
| 查看次数: |
427 次 |
| 最近记录: |