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 }
  • 相关阅读:
    Hibernate实现limit查询报错 :unexpected token: limit near line 1, column 33 [from pojo.Product p order by id limit ?,? ]
    slot_filling
    Perplexity(困惑度)
    图网络
    textrank
    copynet
    PGN
    beam-search的改进
    项目实战:如何构建知识图谱
    实体关系三元组抽取
  • 原文地址:https://www.cnblogs.com/zhanjxcom/p/5572493.html
Copyright © 2011-2022 走看看