首页 > 其他 > 详细

static_cast<>() 类型转换

时间:2015-11-16 14:13:30      阅读:275      评论:0      收藏:0      [点我收藏+]

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<>() 类型转换

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!