vector中的剥离现象

来源:互联网 发布:金庸小说 知乎 编辑:程序博客网 时间:2024/04/28 09:52
#include <stdlib.h>#include <stdio.h>#include <vector>#include <iostream>using namespace std;class BaseClass{public:    int a;    string b;     BaseClass() : a(1), b("BaseClass")    {        cout << b << endl;    }    virtual void foo() {};};class AClass : public BaseClass{public:    int aa;    string bb;    virtual void foo()    {        cout << "AClass!" << endl;    }    AClass() : aa(2), bb("AClass")    {        cout << b << endl;    }};class BClass : public BaseClass{public:    int cc;    string dd;    BClass():cc(3), dd("BClass")    {        cout << dd << endl;    }    virtual void foo()    {        cout << "AClass!" << endl;    }};int main(int argc, char* *argv){    vector<BaseClass> vct;    AClass a;//= new AClass();    BClass b;// = new BClass();    AClass a1;// = new AClass();    BClass b1;// = new BClass();    a.aa = 100;    b.cc = 101;    a1.aa = 100;    b1.cc = 101;    vct.push_back(a);    cout << "push a" << endl;    cout << "push b1" << endl;    vct.push_back(b1);    cout << "erase a" << endl;    /*    int i = 0;    for(auto it = vct.begin();it != vct.end();)    {        if(i == 0)        {            vct.erase(it);            i++;        }        else        {            it++;        }    }    vct.push_back(a);    cout << "push a" << endl;    vct.push_back(a);    cout << "push b" << endl;    vct.push_back(b);    cout << "push a1" << endl;    vct.push_back(a1);    cout << "push b1" << endl;    vct.push_back(b1);    */    cout << "Start dynamic_cast" << endl;    for ( BaseClass& value : vct )     {        if(dynamic_cast<BClass*>(&value))        {            cout << "dynamic_cast BClass ok!" << endl;            continue;        }        if(dynamic_cast<AClass*>(&value))        {            cout << "dynamic_cast AClass ok!" << endl;            continue;        }        cout << "ERROR : class is BaseClass  " << endl;     }    return 1;}
g++ -std=c++11 -frtti -g 1.cpp[~/test]./a.outBaseClassBaseClassBaseClassBClassBaseClassBaseClassBaseClassBClasspush apush b1erase aStart dynamic_castERROR : class is BaseClass  ERROR : class is BaseClass 
0 0
原创粉丝点击