C++中的operator主要有两个作用,一是操作符的重载,一是自定义对象类型的隐式转换。
类型转换操作符(type conversion operator)是一种特殊的类成员函数,它定义将类类型值转变为其他类型值的转换。
转换操作符在类定义体内声明,在保留字 operator 之后跟着转换的目标类型。 函数原型
T1::operator T2() [const];   //T1的成员函数,"(T2)a"类型转换
说明:
. 转换函数必须是成员函数,不能指定返回类型,并且形参表必须为空;返回值是隐含的,返回值是与转换的类型相同的,即为上面原型中的T2; . T2表示内置类型名(built-in type)、类类型名(class type)或由类型别名(typedef)定义的名字;
对任何可作为函数返回类型的类型(除了 void 之外)都可以定义转换函数,一般而言,不允许转换为数组或函数类型,
转换为指针类型(数据和函数指针)以及引用类型是可以的; . 转换函数一般不应该改变被转换的对象,因此转换操作符通常应定义为 const 成员; . 支持继承,可以为虚函数; . 只要存在转换,编译器将在可以使用内置转换的地方自动调用它;
#include <iostream>
#include <string>
#include <string.h>
#include <stdio.h> /* linux环境下,sprintf需要该头文件 */ using namespace std; struct STData
{
int data;
int size;
}; class CTet
{
public:
CTet(int age, string name,int data) :_age(age), _name(name)
{
_data.data = data;
_data.size = ;
}
public:
operator char *() const; operator int() const
{
return _age;
} operator struct STData() const
{
return _data;
} operator const struct STData *() const
{
return &_data;
}
private:
int _age;
string _name;
STData _data;
}; //operator的隐式类型转化
CTet::operator char *() const
{
//注意①:转化为指针的时候需要注意内存泄漏问题
static char buf[] = { };
sprintf(buf, "age[%d]:name[%s]", _age, _name.c_str());
printf("buf = %p\n", buf);
return buf;
} void show_data(const STData *data)
{
printf("data[%d] and size[%d] .\n", data->data, data->size);
} void test()
{
CTet a(,"tom",);
/*
可以直接将tmp对象转换成char *,这里实际上是编译器内部完成了以下转化
char *b = a.operator char *();
*/
char *b = a;
//b的地址就是static char buf的地址
printf("b = %p\n", b); /*
注意②:operator的隐式类型转化的对象不能赋值给可变参数
printf原型:int printf(const char *format, ...);
*/
//printf("data is %s\n", a); --无法编译通过 printf("[b] data is %s\n", b); CTet *tmp = new CTet(, "jack", );
//show_data(tmp); --报错:无法将参数 1 从“CTet *”转换为“const STData *” /*
注意③:operator的隐式类型转化只能用于栈变量,不可用于new出来的指针类型
*/ } int main()
{
test();
getchar();
return ;
}

C++ operator关键字详解的更多相关文章

  1. Delphi、Lazarus保留字、关键字详解

    Delphi.Lazarus保留字.关键字详解 来自橙子,万一的博客以及其他地方 保留字:变量等标识符可以再使用: 关键字:有特定含义,不能再次重新定义: 修饰字:类似保留字的功能,也就是说可以重用 ...

  2. 【转载】C/C++中extern关键字详解

    1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义.此外extern也可用来进行链接指定. 也就是说extern ...

  3. python关键字详解

    今天依旧在啃:<笨方法学python>,其中习题37是复习各种关键字.我本想百度一下记一下就ok了,但是百度出来第一个就Hongten的博客.我才意识到我也有博客,我应该学习他,把这些积累 ...

  4. Java面试题04-final关键字详解

    Java面试题04-final关键字详解 本篇博客将会讨论java中final关键字的含义,以及final用在什么地方,感觉看书总会有一些模糊,而且解释的不是很清楚,在此做个总结,以备准备面试的时候查 ...

  5. Objective-C 实用关键字详解1「面试、工作」看我就 🐒 了 ^_^.

    在写项目 或 阅读别人的代码(一些优秀的源码)中,总能发现一些常见的关键字,随着编程经验的积累大部分还是知道是什么意思 的. 相信很多开发者跟我当初一样,只是基本的常用关键字定义属性会使用,但在关键字 ...

  6. java continue break 关键字 详解 区别 用法 标记 标签 使用 示例 联系

    本文关键词: java continue break 关键字 详解 区别  用法 标记  标签 使用 示例 联系   跳出循环 带标签的continue和break 嵌套循环  深入continue ...

  7. mysql中文、英文别名排序问题,order by 关键字详解

    order by 关键字详解:   SELECT intcode AS 商品编码, product_title AS 名称, retailprice AS 零售价, purchaseprice AS ...

  8. Java多线程(三)—— synchronized关键字详解

    一.多线程的同步 1.为什么要引入同步机制 在多线程环境中,可能会有两个甚至更多的线程试图同时访问一个有限的资源.必须对这种潜在资源冲突进行预防. 解决方法:在线程使用一个资源时为其加锁即可. 访问资 ...

  9. java关键字详解----static

    Java Static关键字详解   提起static关键字,相信大家绝对不会陌生,但是,想要完全说明白,猛的一想,发现自己好像又说不太明白... ...比方说,昨天被一个同学问起的时候... ... ...

随机推荐

  1. Android Studio 通过 git update 或者 pull 的时候出错及解决办法

    Android Studio 通过 git update 或者 pull 的时候出错,log 如下: Couldn't save uncommitted changes. Tried to save ...

  2. Atitit 项目的主体设计与结构文档 v5

    Atitit 项目的主体设计与结构文档 v5 1. 版本历史说明2 2. 功能大概说明2 3. 实现的目标3 3.1. cross device跨设备(pc 手机 平板)3 3.2. cross sc ...

  3. HR必备基础能力之人性

    https://www.jianshu.com/p/bbb858431c81 人力资源管理-从新手到入门(正文) 第一章 必备基础能力 第三节 人性 人力资源管理者(HR)日常工作中面对的主要对象是人 ...

  4. Python 传值和传址 copy/deepcopy

    传值:被调函数局部变量改变不会影响主调函数局部变量 传址:被调函数局部变量改变会影响主调函数局部变量 Python参数传递方式:传递对象引用(传值和传址的混合方式),如果是数字,字符串,元组则传值:如 ...

  5. 转axios 的应用

    尤雨溪之前在微博发布消息,不再继续维护vue-resource,并推荐大家开始使用 axios . 一.axios 简介 axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP ...

  6. OpenCV探索之路(十七):Mat和IplImage访问像素的方法总结

    在opencv的编程中,遍历访问图像元素是经常遇到的操作,掌握其方法非常重要,无论是Mat类的像素访问,还是IplImage结构体的访问的方法,都必须扎实掌握,毕竟,图像处理本质上就是对像素的各种操作 ...

  7. 为python 添加新功能-dump

    一直觉得thinkphp提供的dump函数挺好用的,但是python里面没有,就一直想着写个简单的. dir是我比较常用的一个内置函数了,但是显示效果实在有点受不了,每次我都要从大量的字符串里找到我需 ...

  8. ARKit从入门到精通(5)-ARScnView介绍

    转载:http://blog.csdn.net/u013263917/article/details/73156918 AR视图,在第一小节笔者介绍过,ARKit支持3D的AR场景和2D的AR场景,A ...

  9. 基于jq流畅度非常好的图片左右切换焦点图

    今天给大家分享一款基于jq流畅度非常好的图片左右切换焦点图.这是一款基于jQuery实现的支持鼠标拖动切换jQuery特效下载.效果图如下: 在线预览   源码下载 实现的代码. html代码: &l ...

  10. web开发经验

    图片显示不全 网站进行了迁移,更换了新框架,结果出现了图片显示不全的问题,后来发现是nginx权限问题 curl 无报错,无返回 有可能是url错误,而无服务器对错误的url返回空,没返回错误