zoukankan      html  css  js  c++  java
  • C++ operator 知识点

    [转]C++隐式类型转换 operator T

    http://m.blog.csdn.net/blog/micx0124/12389973#

    对于operator关健字用于运算符重载这我们都知道,其实operator还有另外一种作用:强制类型转换。上一周为了对应项目中一个问题,同事帮助写了一个类,使用到了operator的强制类型转换作用,后来source review的时候几个leader也不明白其作用,问我是怎么回事,当时我也只是一知半解,无奈解析了半天更天也没有让leader明白,汗。。。后来让这们同事来解析才清楚。
        下面通过一个示例来说明:

    /*************************Test_OperatorConvert.h*************************/
    #ifndef TEST_OPERATORCONVERT_H
    #define TEST_OPERATORCONVERT_H
    
    const int MAX_PATH2 = 256;
    
    class Test_OperatorConvert{
    public:
        Test_OperatorConvert();
        Test_OperatorConvert(char *str);
        virtual ~Test_OperatorConvert();
        char *GetStr();
        operator char*();
    private:
        char m_szTest[MAX_PATH2];
    };
    #endif
    
    


     

    /*************************Test_OperatorConvert.cpp*************************/
    #include "stdafx.h"
    #include "Test_OperatorConvert.h"
    
    #include <iostream>
    using namespace std;
    
    Test_OperatorConvert::Test_OperatorConvert()
    {
        memset(m_szTest, 0, sizeof(m_szTest));
    }
    
    Test_OperatorConvert::Test_OperatorConvert(char *str)
    {
        strcpy(m_szTest, str);
    }
    
    Test_OperatorConvert::~Test_OperatorConvert()
    {
    }
    
    // 这个函数实现的功能与operator char*()的功能一致。
    char *Test_OperatorConvert::GetStr()
    {
        return m_szTest;
    }
    
    Test_OperatorConvert::operator char*()
    {
        return m_szTest;
    }
    


     

    int main(int argc, char* argv[])
    {
        Test_OperatorConvert cTestInstance;
        char *pTest1 = cTestInstance; // 这里就是operator char*()发挥作用的地方,
                                                          // 类Test_OperatorConvert 被转换成char*类型。
        char *pTest2 = cTestInstance.GetStr(); //如果没有实现operator char*(),使用这种方法也一样。
        return 0;
    }
    



     



    有些人称这种方法为:隐式类型转换,实现的基本方法就是:operator type_name();

  • 相关阅读:
    Mysql支持的数据类型
    JavaScript 原型中的哲学思想
    99%的人都理解错了HTTP中GET与POST的区别
    Let's Encrypt,站点加密之旅
    说说cglib动态代理
    说说Java代理模式
    RESTful API 编写指南
    RESTful 架构风格概述
    Centos 6 搭建安装 Gitlab
    超详细的阿里字节Spring面试技术点总结(建议收藏)
  • 原文地址:https://www.cnblogs.com/maxpak/p/4486992.html
Copyright © 2011-2022 走看看