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();

  • 相关阅读:
    创业第一步:为员工打工
    C#笔记30:Trace、Debug和TraceSource的使用以及日志设计
    C#笔记29:程序集、应用程序配置及App.config和YourSoft.exe.config
    WPF快速指导1:资源
    并行编程之数据并行
    异常处理之ThreadException、unhandledException及多线程异常处理
    Efficient C#:为什么要把泛型作为返回值
    C#笔记31:本地化或多语言支持
    C#数据本地存储方案之SQLite
    C#笔记9:异常
  • 原文地址:https://www.cnblogs.com/maxpak/p/4486992.html
Copyright © 2011-2022 走看看