条款27:尽量少做转型操作
来源:互联网 发布:好听的淘宝优惠群取名 编辑:程序博客网 时间:2024/06/10 03:34
特别说明dynamic_cast和static_cast两种
1、static_cast
#include <iostream>using namespace std;class Base{public:Base(int i = 0):bVal(i){cout<<"基类构造函数"<<endl;}virtual void say(){cout<<++bVal<<endl;}int bVal;};class Drived:public Base{public:Drived(int i = 10, int j = 5):Base(i),dVal(j){cout<<"派生类构造函数"<<endl;}void say(){cout<<"基类值为:"<<endl;//错误做法 这里仅是对*this拷贝一个base部分的副本然后调用say(),//他的操作不会影响到*this的内容 static_cast<Base>(*this).say(); //case1//正确做法//Base::say(); //case2 cout<<"派生类值为:"<<endl;cout<<dVal<<endl;}private:int dVal;};int main(){Drived d;d.say();cout<<d.bVal<<endl;return 0;}
使用case1的运行结果是:
基类构造函数
派生类构造函数
基类值为:
11
派生类值为:
5
10
使用case2的运行结果是:
基类构造函数
派生类构造函数
基类值为:
11
派生类值为:
5
11
2、dynamic_cast
#include <iostream>using namespace std;class Base{public:Base(int i = 0):bVal(i){cout<<"基类构造函数"<<endl;}//virtual void say(){} //case1virtual void fun(){} //case2private:int bVal;};class Drived:public Base{public:Drived(int i = 10, int j = 5):Base(i),dVal(j){cout<<"派生类构造函数"<<endl;}void say(){cout<<"派生函数"<<endl;}private:int dVal;};int main(){Base *pd = new Drived;//pd->say(); //case1Drived* pd1 = dynamic_cast<Drived*>(pd); //case2pd1->say(); //case2return 0;}
使用case1时基类必须有虚函数且与继承类函数同名。
使用case2时基类必须有虚函数,任何虚函数都行。
还有一种是通过Vector和std::trl::shared_ptr实现的,Effective C++中也说了,但是不是很了解怎么用,blog http://blog.csdn.net/thefutureisour/article/details/7968534也说明了,可以参考。
0 0
- 条款27: 尽量少做转型操作
- 条款27:尽量少做转型操作
- 条款27:尽量少做转型操作
- 条款27:尽量少做转型动作
- 条款27:尽量少做转型动作
- 条款27:尽量少做转型动作
- 条款27:尽量少做转型动作
- 条款27:尽量少做转型动作
- 条款27:尽量少做转型动作
- 条款27 尽量少做转型动作
- 条款27 尽量少做转型动作
- 条款27尽量少做转型动作
- Effective C++:条款27:尽量少做转型动作
- 《Effect C++》学习------条款27:尽量少做转型动作
- 【Effection C++】读书笔记 条款27:尽量少做转型动作
- 读书笔记《Effective C++》条款27:尽量少做转型动作
- 《Effective C++》学习笔记条款27 尽量少做转型动作
- Effective C++ 阅读笔记_条款27 尽量少做转型动作
- Android创建Service后台常驻服务并使用Broadcast通信
- Code Hunt SECTOR 02 LOOPS
- uva_10246_Asterix and Obelix(最短路)
- 分析源代码编译链接过程和shell中ELF格式可执行文件的初始化执行过程
- request.getparameter中文乱码问题解决方案
- 条款27:尽量少做转型操作
- [BZOJ2434]NOI2011阿狸的打字机|AC自动机|fail树|树状数组
- nyoj-220 推桌子
- 设计模式--访问者模式
- android查看kernel log
- 第10题
- 调色板原理
- 操作系统—回顾
- Harris角点检测