static_cast<>() 类型转换

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;
}

输出:

static_cast<>() 类型转换_第1张图片

你可能感兴趣的:(static_cast<>() 类型转换)