Effective C++ 条款27的例子:用static_cast<*this>()代表类型转换的隐含问题。
ios
转换以后操做的并不是原有对象,而是一个副本,是一个临时变量,没法取地址,右值。函数
code:对象son,子类的虚函数中,强制转化this为父类,并调用父类的虚函数,发现并未修改该子类对象的父类部分的成员变量的值,this
#include <iostream> using namespace std; class Father { public: Father(int value):a(value){} virtual void blink(int value) { a = value; } int getA() { return a; } private: int a; }; class Son:public Father { public: Son(int value):Father(value), b(value){} virtual void blink(int value) { // Father::blink(value); static_cast<Father>(*this).blink(value); b = value; } int getB() { return b; } private: int b; }; int main() { Son son(1); cout<<son.getA()<<" "<<son.getB()<<endl; son.blink(2); cout<<son.getA()<<" "<<son.getB()<<endl; return 0; }
输出:spa