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

时间: 2024-10-13 08:43:14

C++ operator 知识点的相关文章

C++ operator 知识点 2

http://blog.csdn.net/szlanny/article/details/4295854 operator它有两种用法,一种是operator overloading(操作符重载),一种是operator casting(操作隐式转换). 1.operator overloadingC++可以通过operator 重载操作符,格式如下:类型T operator 操作符 (),如比重载+,如下所示 [cpp] view plaincopy template<typename T>

【转】C++易混知识点3. New Operator, Operator New, Placement New 实例分析,比较区别

我们知道,C++中引入了New 这个内置符号,很大方便了指针的使用,程序员不必关注与这块堆上新分配的内存是如何来的,如何初始化的,然后如何转换为我们想要的类型指针的.现在,我们重点来分析下这个NEW内置符号背后的步骤和所调用到的函数.这里面涉及到new operator, operator new, placement new. 转载请注明出处: http://blog.csdn.net/elfprincexu 1. New Operator (__type__ * a = new a();)

C/C++知识点总结(5)

运算符重载函数的限制: 五个不能实现重载的符号:".", ".*", "::", "?", "sizeof": 重载运算符可以定义为类成员函数(这时候可以向当前对象发送消息的动作执行操作),也可定义为全局函数(一般为对应类的友元函数,此类函数需要显式指定所有参数,并且如果有转换构造函数,则可以使用于所有参数类型的运算); 一般的重载运算符函数可以被派生类继承使用,但是赋值运算符重载函数不能被继承:因此每一个

C/C++知识点总结(1)

C++的前世今生: C的结构化思想: Ada的模版思想: Fortran的运算符重载思想: Simula的OO思想:封装,继承,多态: C++类型描述了变量的三个特征: 该类型在内存中占用物理空间的大小(空间读取范围): 该类型的值的合法的取值范围(位模式解释方法): 合法的操作集(数据的用法): C++的整数类型有两类修饰符(Qualifier): signed和unsigned:调整整型数值的取值范围(不改变内存大小,仅改变数值读取模式,unsigned表示读取模式为非负数):整数类型 (i

C/C++知识点总结(3)

操作符重载函数(Operator Overload Function)的基本概念: 目的是以与对待内置数据类型相同的方式对待用户自定义类型(程序执行速度会受到影响),限制是不能随意选择函数名和参数个数(必须与重载的基本类型运算符保持一致): 编译器首先检查的表达式中的左操作数是否为对象类型,若是则在其类定义中搜寻对应的operator开头的方法,最后进行函数名字替换,参数类型检查等等操作(作为重载操作符函数的参数,一般使用const的索引类型,除非某个参数需要改变): 如果左操作数为数值类型,则

常见的机器学习&amp;数据挖掘知识点

常见的机器学习&数据挖掘知识点 转载请说明出处 Basis(基础): MSE(Mean Squared Error, 均方误差) RMSE(Root Mean Squared Error, 均方根误差) RRSE(Root Relative Squared Error, 相对平方根误差) MAE(Mean Absolute Error, 平均绝对误差) RAE(Root Absolute Error, 平均绝对误差平方根) LSM(Least Mean Squared, 最小均方) LSM(Le

《C++编程思想》第八章 内 联 函 数 (知识点+习题+解答)

一.相关知识点 任何在类中定义的函数自动地成为内联函数,但也可以使用inline关键字放在类外定义的函数前面使之成为内联函数.但为了使之有效,必须使函数体和声明结合在一起,否则,编译器将它作为普通函数对待.因此 inline int PlusOne(int x); 没有任何效果,仅仅只是声明函数(这不一定能够在稍后某个时候得到一个内联定义).成功的方法如下: inline int PlusOne(int x) { return ++x ;} 在头文件里,内联函数默认为内部连接--即它是 stat

【基础】常用的机器学习&amp;数据挖掘知识点

转自http://www.36dsj.com/archives/20135 Basis(基础): MSE(Mean Square Error 均方误差),LMS(LeastMean Square 最小均方),LSM(Least Square Methods 最小二乘法),MLE(MaximumLikelihood Estimation最大似然估计),QP(Quadratic Programming 二次规划), CP(Conditional Probability条件概率),JP(Joint P

C/C++知识点总结(4)

C++的类型转换规则: 对于数值类型而言:当一个较小数值类型赋值给一个较大数值类型的时候,C++支持隐式的类型转换,不会有任何的损失: 对于数值类型而言,当一个较大数值类型赋值给一个较小数值类型时候,由于较小数值类型内存空间有限,有信息丢失,这种转换被视为不安全,但仍旧可以隐式进行: 对于对象类型而言,派生类对象中的信息肯定包含基类对象,将一个派生类对象赋值给基类对象的时候,肯定也有信息丢失,但是这不会影响我们使用基类对象的信息,所以这种转换被视为安全的,可以隐式进行: 对于对象类型而言,反过来