如果容器类型定义为基类类型,那么虽然可以把派生类装进容器中,但是不能通过容器访问派生类自己的public成员,派生类将会倍切掉,只保留派生类的基类部分;
如果把容器定义为派生类类型,那么不能把基类类型装进容器中,没有从基类类型到派生类类型的标准转换。虽然可以显式的使用强制类型转化把基类转化成派生类,放入容器,但是如果使用这些元素的派生类成员时,它们将会是未初始化的。
1 class Base
2 {
3 public:
4 Base(int i = 0):val(i){}
5 int basePub;
6 private:
7 int val;
8 };
9
10 class Derived:public Base
11 {
12 public:
13 Derived(int i = 0, int j = 1):Base(i),val(j){}
14 int derivedPub;
15 private:
16 int val;
17
18 };
19
20
21
22 int main()
23 {
24 Base b;
25 Derived d;
26
27 vector<Base> bs;
28 bs.push_back(b);
29 bs.push_back(d);//切割,只保留基类成员部分
30 cout<<bs[1].derivedPub<<endl;
31 //错误,通过容器只能访问基类类型的成员
32
33
34 vector<Derived> ds;
35 ds.push_back(d);
36 ds.push_back(b);
37 //错误,派生类类型的容器不能装载基类成员
38 return 0;
39 }
原文链接: https://www.cnblogs.com/zhanjxcom/p/5572493.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/234852
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!