您的位置:首页 > 其它

vector中的剥离现象

2015-10-06 11:48 393 查看
#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.out
BaseClass
BaseClass
BaseClass
BClass
BaseClass
BaseClass
BaseClass
BClass
push a
push b1
erase a
Start dynamic_cast
ERROR : class is BaseClass
ERROR : class is BaseClass
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: