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
相关文章推荐
- 我写过的软件之OneWorld-大世界2
- String,StringBuffer, StringBuilder 的区别
- [leetcode279] perfect squares
- 登陆
- Delphi XE7 学习笔记 StopWatch类
- UICollectionView 以及 AWCollectionViewDialLayout
- go语言编辑器:liteide
- 四则运算
- ArrayList,LinkedList,Vestor区别
- 使用JAVA操作HIVE
- [Maven]Maven介绍,包括作用、核心概念、用法、常用命令、扩展及配置
- Android调用堆栈跟踪实例分析
- golang 获取exe、dll、apk 版本号
- 线段树 csu1551 Longest Increasing Subsequence Again
- Mapped Statements collection does not contain value for(mybatis框架项目)
- Codeforces Round #264 (Div. 2) C Gargari and Bishops 【暴力】
- 从Lumia退役看为什么WP走向没落
- Java 读取大文件
- 140 Word Break II [Leetcode]
- phalapi-入门篇5(数据库操作和Model层)