zoukankan      html  css  js  c++  java
  • C++ 容器与继承

    如果容器类型定义为基类类型,那么虽然可以把派生类装进容器中,但是不能通过容器访问派生类自己的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 }
  • 相关阅读:
    httpd添加新模块
    编译httpd细节
    apache配置文件说明及一些指令
    xen原理
    EXSI的使用
    VMWare ESX server安装
    虚拟化技术
    Kvm命令集管理虚拟机
    RAID几种方式
    BZOJ1011 [HNOI2008]遥远的行星 【奇技淫巧】
  • 原文地址:https://www.cnblogs.com/zhanjxcom/p/5572493.html
Copyright © 2011-2022 走看看