[瞎JB写] C++多态
2016-05-27 09:47
656 查看
似乎只能通过引用或者指针进行动态多态。。。蛋疼的语法
这样就可以实现所有物体放在一个容器里。。。
但是缺点也是显而易见的,如果强制转换到了错误的类,后面使用的时候就会出问题。
所以不能这么粗暴的转换,有一表达式可以帮助我们:
dynamic_cast
#define PTR_CONVERT(shared_ptr, type) (dynamic_cast<type*>(shared_ptr.get()))
#include <iostream> #include <vector> #include <memory> using namespace std; class A { public: virtual void init() = 0; }; class B : public A { public: void init() { cout << "B init" << endl; } }; class C :public B { public: void print() { cout << "C -> B" << endl; } void init() { cout << "C init" << endl; } }; class D : public A { private: int wow; public: D() { wow = 0; } D(int a) :wow(a) {} void init() { cout << "D init" << endl; } void print() { cout << "D -> A" << wow << endl; } }; int main() { vector<shared_ptr<A>> list; list.push_back(make_shared<C>()); list.push_back(make_shared<D>(1)); for (auto &item : list) { item->init(); } ((D*)list[1].get())->print(); return 0; }
这样就可以实现所有物体放在一个容器里。。。
但是缺点也是显而易见的,如果强制转换到了错误的类,后面使用的时候就会出问题。
所以不能这么粗暴的转换,有一表达式可以帮助我们:
dynamic_cast
#define PTR_CONVERT(shared_ptr, type) (dynamic_cast<type*>(shared_ptr.get()))
PTR_CONVERT(list[0], C)->print(); PTR_CONVERT(list[1], D)->print();
相关文章推荐
- C++ 内存存储,参数传递的深度理解
- [置顶] c++ static的使用方法
- 象棋 马 遍历情况
- C/C++编程心得
- 常见的C语言内存错误及对策
- C++编程基础笔记章节九
- VC++ 之获取主机IP gethostbyname()函数 详细实例分析
- 嵌入式为什么选择C语言?
- leetcode #43 in cpp
- MPI实现矩阵乘法程序--实现MPI传递连续数组
- C++ 函数 重载 覆盖 隐藏
- leetcode $42 in cpp
- leetcode #41 in cpp
- 第一次写WIN32 SOCKET C/S模式聊天程序有感
- C/C++ 各种类型最大值最小值
- 基于VC平台下C++反汇编与逆向分析研究——No.1
- C++ 捕获异常
- Effective C++: std::thread
- C语言谜题
- c++ 引用 5.26