社区
C++ 语言
帖子详情
比较特殊的运算符重载
caddor
2012-01-30 05:58:34
比较特殊的运算符重载:
class Sample
{
int *p;
public:
operator int*()
{
return p;
}
};
重载了int* , 这种函数感觉很怪异, 函数返回值,函数名是什么??
operator int*() const
{
return p;
}
它的 函数返回值,函数名是什么??
...全文
94
8
打赏
收藏
比较特殊的运算符重载
比较特殊的运算符重载: class Sample { int *p; public: operator int*() { return p; } }; 重载了int* , 这种函数感觉很怪异, 函数返回值,函数名是什么?? operator int*() const { return p; } 它的 函数返回值,函数名是什么??
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
caddor
2012-01-30
打赏
举报
回复
多谢了
[Quote=引用 7 楼 we_sky2008 的回复:]
引用 5 楼 caddor 的回复:
前辈,在请教个问题,我对这个问题,查了一些资料,都没有彻底理解
void f2() {....}
以下都是对的:
(&f2)();
(*f2)();
(****************************f2)();
(****************************&f2)(……
[/Quote]
we_sky2008
2012-01-30
打赏
举报
回复
[Quote=引用 5 楼 caddor 的回复:]
前辈,在请教个问题,我对这个问题,查了一些资料,都没有彻底理解
void f2() {....}
以下都是对的:
(&f2)();
(*f2)();
(****************************f2)();
(****************************&f2)();
(&*f2)();
按照 is……
[/Quote]
函数名是比较特殊的东西,可能语言本身在设计时考虑到函数名与函数指针读写习惯与方便性就设计为这样了
所以,这可能不再是语法问题,而是规定了,具体我也没考虑过,楼主可以查阅下标准文档
所以,你前面的那些理解正确与否还是要参考标准文档,
但是“对于:(&f2)() 是f2转成函数指针,然后&f2取函数之指针的地址。。。。然后。。。。”
这句话我觉得是有问题的,函数名本身是一个左值,所以在取其地址之前函数名并不会转换为函数指针,很简单的原因,如果在取其地址之前函数名转换为函数指针,那么再取其地址之后,表达式的类型将会是void(**)(); 将不能作为函数指针来调用,
独自听枫
2012-01-30
打赏
举报
回复
自定义转换,不算特殊,只是少用
caddor
2012-01-30
打赏
举报
回复
前辈,在请教个问题,我对这个问题,查了一些资料,都没有彻底理解
void f2() {....}
以下都是对的:
(&f2)();
(*f2)();
(****************************f2)();
(****************************&f2)();
(&*f2)();
按照 iso中提供的资料说是:
普通函数调用:跟着括号的后缀表达式。
调用的时候,后缀表达式转换为函数指针。
比如: (*f2)() 是指 f2转成函数指针吗? *f2又指函数名字,然后*f2再次转为函数指针。。。
转了两次, 是不是这样理解???
对于:(&f2)() 是f2转成函数指针,然后&f2取函数之指针的地址。。。。然后。。。。
我肯定理解有问题
能帮忙纠正一下吗
[Quote=引用 2 楼 we_sky2008 的回复:]
引用 1 楼 we_sky2008 的回复:
这是自定义的转换函数
楼主翻下书吧,书中讲的很清楚
看下《c++ PRIMER》或者《MORE EFFECTIVE C++》Item M5:谨慎定义类型转换函数
[/Quote]
caddor
2012-01-30
打赏
举报
回复
我不觉的要慎用啊
比如:CString 中就用了
operator LPCTSTR() const
[Quote=引用 2 楼 we_sky2008 的回复:]
引用 1 楼 we_sky2008 的回复:
这是自定义的转换函数
楼主翻下书吧,书中讲的很清楚
看下《c++ PRIMER》或者《MORE EFFECTIVE C++》Item M5:谨慎定义类型转换函数
[/Quote]
ybxuwei
2012-01-30
打赏
举报
回复
强制转换函数,把Sample转化为int*类型
int *p = (int*)Sample;
we_sky2008
2012-01-30
打赏
举报
回复
[Quote=引用 1 楼 we_sky2008 的回复:]
这是自定义的转换函数
楼主翻下书吧,书中讲的很清楚
[/Quote]
看下《c++ PRIMER》或者《MORE EFFECTIVE C++》Item M5:谨慎定义类型转换函数
we_sky2008
2012-01-30
打赏
举报
回复
这是自定义的转换函数
楼主翻下书吧,书中讲的很清楚
华为 C++ 培训资料
2.2
运算符重载
………………………………………………………………… 20 第三章 模板 ………………………………………………………………………29 3.1 模块函数 ………………………………………………………………...
C++语法——详解
运算符重载
运算符重载
是C++的一个重要特性。有了
运算符重载
,在代码编写时能更好的实现封装。 一.
运算符重载
介绍 ...因为当我们需要
运算符重载
时,往往是类中一种
特殊
的类型需要处理或者类本身需要处理。就像我们可能会把.
运算符重载
之成员
运算符重载
成员
运算符重载
函数 成员
运算符重载
函数,即把
运算符重载
函数定义为某个类的成员函数。 1、定义成员
运算符重载
函数的语法形式 (1)在类的内部,定义成员
运算符重载
函数的格式如下: 函数类型 operator 运算符(形参...
C++
运算符重载
详解
为什么要对运算符进行重载: C++预定义中的运算符的操作对象只局限于基本的内置数据...C++
运算符重载
的实质:
运算符重载
的实质就是函数重载或函数多态。
运算符重载
是一种形式的C++多态。目的在于让人能够用同名的函
运算符重载
———
运算符重载
的基本概念
引入
运算符重载
的目的: 由于C++预定义的运算符,只能用于基本数据类型的运算:整型、实型、字符型、逻辑型,导致对象无法通过运算符进行运算。故引入了
运算符重载
。
运算符重载
: 1:
运算符重载
,就是对已有的...
C++ 语言
64,680
社区成员
250,490
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章