Effective C++ 条款27的例子:用static_cast<*this>()表明类型转换的隐含问题。
转换之后操作的并非原有对象,而是一个副本,是一个临时变量,无法取地址,右值。
code:对象son,子类的虚函数中,强制转化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;
}
输出:

原文:http://my.oschina.net/u/2368952/blog/530821