http://blog.csdn.net/szlanny/article/details/4295854

operator它有两种用法,一种是operator overloading(操作符重载),一种是operator casting(操作隐式转换)。

1.operator overloading
C++可以通过operator 重载操作符,格式如下:类型T operator 操作符 (),如比重载+,如下所示

  1. template<typename T> class A
  2. {
  3. public:
  4. const T operator + (const T& rhs)
  5. {
  6. return this->m_ + rhs;
  7. }
  8. private:
  9. T m_;
  10. };

又比如STL中的函数对象,重载(),这是C++中较推荐的写法,功能与函数指针类似,如下所示

  1. template<typename T> struct A
  2. {
  3. T operator()(const T& lhs, const T& rhs){ return lhs-rhs;}
  4. };

2 operator casting
C++可以通过operator 重载隐式转换,格式如下: operator 类型T (),如下所示

  1. class A
  2. {
  3. public:
  4. operator B* () { return this->b_;}
  5. operator const B* () const {return this->b_;}
  6. operator B& () { return *this->b_;}
  7. operator const B& () const {return *this->b_;}
  8. private:
  9. B* b_;
  10. };

A a;
当if(a),编译时,其中它转换成if(a.operator B*()),其实也就是判断 if(a.b_)

正对这两个用法,自己特写了2个例子。

class Test  //重载的类
{
public:
Test(int a)
{
m_age = a;
}
~Test(){}

Test operator = (Test &temp)
{
this->m_age = temp.m_age;

return *this;
}

Test operator += (Test & temp2)
{
this->m_age += temp2.m_age;

return *this;
}

public:
int m_age;

};

class TestB  //隐式转换
{
public:
TestB(){}
~TestB(){}

char* getStr()
{
memset(m_buf, 0, 30);
strcpy(m_buf, "get str()");
printf("get str()\n");

return m_buf;
}

operator char*()
{
memset(m_buf, 0, 30);
strcpy(m_buf, "char *");
printf("char *\n");

return m_buf;
}

public:
char m_buf[30];

};

int main()
{
Test a(5), b(15);

a = b;
printf("a.m_age=%d\n", a.m_age);//15

a += b;
printf("a.m_age=%d\n", a.m_age);//30

TestB bb;
char *ptest1 = bb; //printf char * 这里TestB 被转化为 char *
char *ptest2 = bb.getStr(); //printf get str()

return 0;

}

C++ operator 知识点 2的更多相关文章

  1. C++ operator 知识点

    [转]C++隐式类型转换 operator T http://m.blog.csdn.net/blog/micx0124/12389973# 对于operator关健字用于运算符重载这我们都知道,其实 ...

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

    我们知道,C++中引入了New 这个内置符号,很大方便了指针的使用,程序员不必关注与这块堆上新分配的内存是如何来的,如何初始化的,然后如何转换为我们想要的类型指针的.现在,我们重点来分析下这个NEW内 ...

  3. C#知识点记录

    用于记录C#知识要点. 参考:CLR via C#.C#并发编程.MSDN.百度 记录方式:读每本书,先看一遍,然后第二遍的时候,写笔记. CLR:公共语言运行时(Common Language Ru ...

  4. C++重要知识点小结---3

    C++重要知识点小结---1:http://www.cnblogs.com/heyonggang/p/3246631.html C++重要知识点小结---2:http://www.cnblogs.co ...

  5. Perl小知识点之排序sort

    脚本这种东西,就是要常用,否则一段时间不用就生疏了,因此决定时时记一些小知识点,一来回顾一下,二来需要的时候可以迅速获得提示. Sort by number You could now write a ...

  6. 常用的机器学习&数据挖掘知识点【转】

    转自: [基础]常用的机器学习&数据挖掘知识点 Basis(基础): MSE(Mean Square Error 均方误差),LMS(LeastMean Square 最小均方),LSM(Le ...

  7. C# 知识点记录(持续更新中)

    从看C#入门经典开始系统的学习C#,本文主要记录学习过程中的一些知识点,也是我博客生涯的开始,比较重要成体系的部分会单重新写文章整理归纳. 1.一字不变的字符串 @字符 使转义序列不被处理,按照原样输 ...

  8. C/C++ 知识点---存储区

    C/C++ 知识点---存储区 在C++中,内存分成5个区,他们分别是堆.栈.自由存储区.全局/静态存储区和常量存储区.    栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储 ...

  9. Java 面试知识点解析(四)——版本特性篇

    前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...

随机推荐

  1. 论文笔记之:Pedestrian Detection aided by Deep Learning Semantic Tasks

    Pedestrian Detection aided by Deep Learning Semantic Tasks CVPR 2015 本文考虑将语义任务(即:行人属性和场景属性)和行人检测相结合, ...

  2. linux oracle profile配置

    [oracle@db01 ~]$ more .bash_profile # .bash_profile # Get the aliases and functionsif [ -f ~/.bashrc ...

  3. sqlserver模糊查询【转】

    http://blog.csdn.net/liuxinxin1125/article/details/5444873 SELECT * FROM user WHERE name LIKE ';%三%' ...

  4. wikioi 1160 蛇形矩阵

    /*======================================================================== 1160 蛇形矩阵 题目描述 Descriptio ...

  5. Underscore.js 函数节流简单测试

    函数节流在日常的DOM界面数据交互中有比较大的作用,可以减少服务器的请求,同时减少客户端的内存影响 Underscore.js  本省就包含了函数节流的处理函数 _.throttle 和 _.debo ...

  6. css之cursor,float

    鼠标形状: 在html中可以任意定义各个标签的显示形状,也可以此用来做些标签显示假像. <body> <p style="cursor: pointer"> ...

  7. MySQL Show命令的使用

    show tables或show tables from database_name; 解释:显示当前数据库中所有表的名称 show databases; 解释:显示mysql中所有数据库的名称 sh ...

  8. Review Board——在线代码审查工具

    代码审查(Code Review)不但可以提高质量,而且还是一个知识共享和指导的极好的手段.不幸的是,准备工作的辛苦和工具支持的缺乏让代码审查很容易被延至“稍后再议”.Review Board的目标便 ...

  9. myBatis抛出异常Result Maps collection already contains value ...

    BaseResultMap 是自动生成的,非说已经包含了,NM! 删除tomcat下的 D:\apache-tomcat-7.0.52\webapps\chp-approve\WEB-INF\clas ...

  10. nginx 一般网站部署常用参数设置

    #user nobody;worker_processes 2; #error_log logs/error.log;#error_log logs/error.log notice;#error_l ...