标签:style blog http color 使用 数据
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie
todo Item34
旧式转型
(T) expression 或 T (expression)
新式转型
const_cast<T>(expression)
通常被用来将对象的常量性转除(cast away the constness)
dynamic_cast<T>(expression)
执行“安全向下转型”,也就是用来决定某对象是否归属继承体系中的某个类型。
reinterpret_cast<T>(expression)
执行低级转型 //不太懂??
static_cast<T>(expression)
强迫隐式转换
//旧式转型与新式转型
class Widget{
public:
explicit Widget(int size);
//...
}
void soSomeWork(const Widget &w);
doSomeWork(Widget(15)); //以一个int加上“函数风格”的转型动作创建一个Widget.
doSomeWork(static_cast<Widget>(15)); //以一个int加上“C++风格”的转型动作创建一个Widget
class Base{...};
class Derived: public Base{...};
Derived d;
Base *pb = &d;有时候上述两个指针值并不相同 ,可能会有个偏移量在运行期被施行于Derived *指针上。class Window{ //base class
public:
virtual void onResize(){...} //base onResize 实现代码
//...
};
class SpecialWindow: public Window{ //derived class
public:
virtual void onResize(){
static_cast<Window>(*this).onResize(); //derived onResize 实现代码,将*this转型为Window,然后调用其 onResize, 错误
//onResize 操作的是转型生成的临时对象的数据
//... 这里进行 SpecialWindow 专属行为
}
}class SpecialWindow: public Window{
public:
virtual void onResize(){
Window::onResize(); //调用Window::onResize作用于*this身上
}
}class Window {...};
class SpecialWindow: public Window{
public:
void blink();
//...
};
typedef std::vector<std::tr1::shared_ptr<Window> > VPW;
VPW winPtrs;
//...
for(VPW::iterator iter = winPtrs.begin(); iter != winPtrs.end(); ++iter){
if(SpecialWindow *psw = dynamic_cast<SpecialWindow*> (iter->get())) //不希望使用 dynamic_cast,因为许多实现版本执行速度相当慢
psw->blink();
}typedef std::vector<std::tr1::shared_ptr<SpecialWindow> >VPSW;
VPSW winPtrs;
//...
for(VPSW::iterator iter = winPtrs.begin(); iter != winPtrs.end(); ++iter){
(*iter)->blink();
}class Window{
public:
virtual void blink(){} //缺省实现代码 “什么也没做”;
//<span style="color:#ff0000;">Item 34 --> </span>
//...
};
class SpecialWindow: public Window{
public:
virtual void blink(){...}; //在此class内,blink做某些事
//...
};
typedef std::vector<std::tr1::shared_ptr<Window> > VPW;
VPW winPtrs;
//...
for(VPW::iterator iter = winPtrs.begin(); iter != winPtrs.end(); ++iter){
psw->blink();
}Effective C++ Item 27 少做转型操作,布布扣,bubuko.com
标签:style blog http color 使用 数据
原文地址:http://blog.csdn.net/zhengsenlie/article/details/37649153