设为首页 加入收藏

TOP

编译时的错误捕捉(一)
2013-04-24 12:15:55 来源: 作者: 【 】 浏览:920
Tags:编译 时的 错误 捕捉

    一、编译时的错误捕捉

    经典的隐式类型转换问题:

    [cpp]

    #include "stdafx.h"

    class Apple

    {

    };

    class Banana

    {

    };

    class Orage

    {

    public:

    Orage(const Apple& apple);

    //  Orage(const Apple& apple, const Banana *pBanana = 0);

    };

    Orage::Orage(const Apple& apple){}

    Orage::Orage(const Apple& apple, const Banana *pBanana){}

    int _tmain(int argc, _TCHAR* argv[])

    {

    Apple   RedApple;

    Banana  GreenBanana;

    Orage   BlueOrage(RedApple);

    //  Orage   BlueOrage(RedApple, &GreenBanana);

    Orage   BlueOrage = RedApple;

    return 0;

    }

    这里的问题出来了,可以让一个Apple对象直接赋值给Orage对象,这是不正确的。为了防止这类隐式转换的问题,加上修饰符即可

    [cpp]

    #include "stdafx.h"

    class Apple

    {

    };

    class Orage

    {

    public:

    explicit Orage(const Apple& apple);

    };

    Orage::Orage(const Apple& apple){}

    int _tmain(int argc, _TCHAR* argv[])

    {

    Apple   RedApple;

    Orage   BlueOrage(RedApple);

    Orage   BlueOrage = RedApple;

    return 0;

    }

    这样在运行的时候,编译器就会提示错误。

    那么如果真要使用=:

    [cpp]

    #include "stdafx.h"

    class Apple

    {

    public:

    operator Orage() const

    {

    Apple mine;

    Orage toConvertOrage(mine);

    return toConvertOrage;

    };

    };

    class Orage

    {

    public:

    explicit Orage(const Apple& apple);

    };

    Orage::Orage(const Apple& apple){}

    int _tmain(int argc, _TCHAR* argv[])

    {

    Apple   RedApple;

    Orage   BlueOrage(RedApple);

    Orage   BlueOrage = RedApple;

    return 0;

    }

   

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇h264 丢包花屏处理的一个想法 下一篇C++之指针和引用的区别

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: