C++ operator 知识点 2
http://blog.csdn.net/szlanny/article/details/4295854
operator它有两种用法,一种是operator overloading(操作符重载),一种是operator casting(操作隐式转换)。
1.operator overloading
C++可以通过operator 重载操作符,格式如下:类型T operator 操作符 (),如比重载+,如下所示
- template<typename T> class A
- {
- public:
- const T operator + (const T& rhs)
- {
- return this->m_ + rhs;
- }
- private:
- T m_;
- };
又比如STL中的函数对象,重载(),这是C++中较推荐的写法,功能与函数指针类似,如下所示
- template<typename T> struct A
- {
- T operator()(const T& lhs, const T& rhs){ return lhs-rhs;}
- };
2 operator casting
C++可以通过operator 重载隐式转换,格式如下: operator 类型T (),如下所示
- class A
- {
- public:
- operator B* () { return this->b_;}
- operator const B* () const {return this->b_;}
- operator B& () { return *this->b_;}
- operator const B& () const {return *this->b_;}
- private:
- B* b_;
- };
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的更多相关文章
- C++ operator 知识点
[转]C++隐式类型转换 operator T http://m.blog.csdn.net/blog/micx0124/12389973# 对于operator关健字用于运算符重载这我们都知道,其实 ...
- 【转】C++易混知识点3. New Operator, Operator New, Placement New 实例分析,比较区别
我们知道,C++中引入了New 这个内置符号,很大方便了指针的使用,程序员不必关注与这块堆上新分配的内存是如何来的,如何初始化的,然后如何转换为我们想要的类型指针的.现在,我们重点来分析下这个NEW内 ...
- C#知识点记录
用于记录C#知识要点. 参考:CLR via C#.C#并发编程.MSDN.百度 记录方式:读每本书,先看一遍,然后第二遍的时候,写笔记. CLR:公共语言运行时(Common Language Ru ...
- C++重要知识点小结---3
C++重要知识点小结---1:http://www.cnblogs.com/heyonggang/p/3246631.html C++重要知识点小结---2:http://www.cnblogs.co ...
- Perl小知识点之排序sort
脚本这种东西,就是要常用,否则一段时间不用就生疏了,因此决定时时记一些小知识点,一来回顾一下,二来需要的时候可以迅速获得提示. Sort by number You could now write a ...
- 常用的机器学习&数据挖掘知识点【转】
转自: [基础]常用的机器学习&数据挖掘知识点 Basis(基础): MSE(Mean Square Error 均方误差),LMS(LeastMean Square 最小均方),LSM(Le ...
- C# 知识点记录(持续更新中)
从看C#入门经典开始系统的学习C#,本文主要记录学习过程中的一些知识点,也是我博客生涯的开始,比较重要成体系的部分会单重新写文章整理归纳. 1.一字不变的字符串 @字符 使转义序列不被处理,按照原样输 ...
- C/C++ 知识点---存储区
C/C++ 知识点---存储区 在C++中,内存分成5个区,他们分别是堆.栈.自由存储区.全局/静态存储区和常量存储区. 栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储 ...
- Java 面试知识点解析(四)——版本特性篇
前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...
随机推荐
- STM32学习笔记:系统时钟和SysTick定时器
原文:http://blog.sina.com.cn/s/blog_49cb42490100s60d.html 1. STM32的时钟系统 在STM32中,一共有5个时钟源,分别是HSI.HS ...
- 【转】iOS10项目打包上传被拒关于隐私权限问题
原文网址:http://blog.csdn.net/yidu_blog/article/details/53064987 今天项目打包提交.收到了苹果的邮件.主要内容: This app attemp ...
- (转) TensorFlow深度学习,一篇文章就够了
TensorFlow深度学习,一篇文章就够了 2016/09/22 · IT技术 · TensorFlow, 深度学习 分享到:6 原文出处: 我爱计算机 (@tobe迪豪 ) 作者: 陈迪 ...
- (转)Monte Carlo method 蒙特卡洛方法
转载自:维基百科 蒙特卡洛方法 https://zh.wikipedia.org/wiki/%E8%92%99%E5%9C%B0%E5%8D%A1%E7%BE%85%E6%96%B9%E6%B3%9 ...
- ps通道混合器
输出通道:红 ,加绿变黄,加蓝变品红,减红变青.输出通道:绿,加红变黄,加蓝变青,减绿变品红.输出通道:蓝,加红变品红,加绿变青,减蓝变黄[对比色]
- 端口映射工具--socat
需求 有些服务器没有公网IP, 在有公网IP的服务器上把端口映射出去. 这样的需求有很多实现, 我比较钟爱socat, 简单就是美. 示例脚本新建一个文件叫intershow.sh /usr/loca ...
- JavaScript-闭包注意事项
闭包允许内层函数引用父函数中的变量,但是该变量是最终值
- python [吐槽]关于nan类型时遇到的问题
今天在用写一段求和的代码时候,发现最后返回的是nan的结果,这段循环求和代码依次调用了三个函数,于是依次打印这三个函数的返回值,发现其中一个函数的返回值为nan,原来是因为这段函数里面没有相似的用户, ...
- python--flask使用
Flask是一个使用 Python 编写的轻量级 Web 应用框架.下面我将使用Flask框架,创建一个简单的html页面示例. 1.项目的目录结构如下所示:exweb\ uniqueenv\ a ...
- js字符串函数
JS自带函数concat将两个或多个字符的文本组合起来,返回一个新的字符串.var a = "hello";var b = ",world";var c = a ...