#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;
BClass b;
AClass a1;
BClass b1;
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;
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