社区
C++ 语言
帖子详情
谁帮忙解释一下操作符重载。
atllover
2003-10-09 11:42:31
我开始看了一些,这个知识,操作符重载,主要的应用(c++)试哪个方面呀。
MyType operator+(MyType opp,MyType ood)
这是重载‘+‘的。
前面的MyType示返回值,后面的两个MyType是参数。
我胡乱写的,不只对否。
也和一般的函数时很相似的。
...全文
149
13
打赏
收藏
谁帮忙解释一下操作符重载。
我开始看了一些,这个知识,操作符重载,主要的应用(c++)试哪个方面呀。 MyType operator+(MyType opp,MyType ood) 这是重载‘+‘的。 前面的MyType示返回值,后面的两个MyType是参数。 我胡乱写的,不只对否。 也和一般的函数时很相似的。
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
williamVII
2003-10-18
打赏
举报
回复
操作符重载主要是为了类的使用都写代码方便,
操作符重载其实都可以用函数重载来实现,
但这样用起来就不方便了.
aron13
2003-10-18
打赏
举报
回复
实际上你就可以把它理解为一个方法。也就是函数。它有和其它方法一样的用法。只是改变了
操作符代表的意思。到底想代表什么,那要你自己才知道。还有包括“<<",">>"这些其实也是
被重载过了的。
robbie24
2003-10-18
打赏
举报
回复
呵呵,"重载是多态的一种手段"
算是吧,静态下的多态.
liem
2003-10-18
打赏
举报
回复
如果运算符是二目运算,那么用成员函数重载时用一个参数;用友元重载时,要二个参数
RookieStar
2003-10-18
打赏
举报
回复
对operator + 一般这样重载:
1. 类的成员函数:MyType& operator + (const MyType& rhs);
2. 类的友元函数:friend MyType& operator + (const MyType& lhs,const MyType& rhs);
xbpeter
2003-10-17
打赏
举报
回复
重载是多态的一种手段,如c++中的"+"运算只能实现实数的加,如要实现复数的加,就要用重载实现
5510
2003-10-12
打赏
举报
回复
MyType operator+(MyType opp,MyType ood)
有些只能做友员重载 << >>
而有些只能做成员函数重载 ()[]等
有些不能重载 :: -〉等
Wolf0403
2003-10-09
打赏
举报
回复
操作符重载一是为了提供简洁美观的书写方式,二是为了保证 STL 应用中的 concept,例如 sort 需要 operator< 的重载等。
class A
{
public:
operator bool(); // 重载转换操作符 (1)
friend A operator+(const A&, const A&); // 重载加号 (2)
friend bool operator<(const A&, const A&); // 重载 < 符号 (2)
void* operator new(size_t); (3)
void operator delete(void*); (3)
friend std::ostream& operator<<(ostream&, const A&);// 提供 cout << 形式的输出(4)
};
(1):可以提供与任意类型的转换
(2):可以为成员函数/友元函数。如果数据公开,如 struct 可以是非友元函数。
(3):必须是成员函数。
(4):必须是友元函数,因为第一个操作数是 ostream 对象
atllover
2003-10-09
打赏
举报
回复
比如说,模版,是com的基础,虚函数是为接口的实现帮忙等等,这方面的应用。谢谢了。
catface
2003-10-09
打赏
举报
回复
重载不是具体用哪个方面 只要你觉得重载比较能清晰说明问题
就可以重载
atllover
2003-10-09
打赏
举报
回复
friend A operator+(const A&, const A&)
friend 是友元,A是返回类型,两个参数在'+'的两边。
对不起,确实很弱,还没好好看,今天晚上再看。
对么?
void* operator new(size_t);
void*是返回值,size_t是int或是char等等么?
还有浅拷贝,就是int a=5;这种拷贝么?
Wolf0403
2003-10-09
打赏
举报
回复
楼上说的是。譬如一个 String 类
class String
{
char * m_str;
String& operator=(const String& strSrc)
{
m_str = new char[strlen(strSrc.m_str) + 1];
strncpy(m_str, strSrc.m_str, strlen(strSrc.m_str) + 1);
return *this;
}
};
如果用默认赋值函数会让两个 String 对象指向同一个底层字符串。必须重载 operator= 使之进行深拷贝
ballguest
2003-10-09
打赏
举报
回复
浅拷贝不合适时,就必须提供成员赋值运算符号,即重载赋值运算符,
C++
操作符
重载
(不能被
重载
的
操作符
)
C++中的运算符: 名称 运算符 算数运算符 +、-、/、%、++、– 位操作运算符 &amp;amp;、 逻辑运算符 !、&amp;amp;&amp;amp;、 比较运算符 &amp;lt;、&amp;gt;、&amp;lt;=、&amp;gt;=、==、!= 赋值运算符 =、+=、-=、*=、/=、%=、 其
C++
操作符
重载
delete
操作符
的语法看起来与二元
操作符
(如 + )不同,原因在于 delete 是一个一元
操作符
,它的作用是释放对象的内存,而不是对对象进行操作。这里, delete
操作符
直接作用于对象 x ,而不是通过对象调用成员函数。对于二元
操作符
(如 + 、 - 等),对象通常出现在
操作符
的前面,而对于一元
操作符
(如 delete 、 new 等),
重载
的方式会有所不同。4. 类内
重载
delete 的实现细节在类内
重载
delete 时,虽然它是类的成员函数,但它并不是通过对象直接调用的。
Delphi 的
操作符
重载
- Record 结构体
Delphi 的结构体类型的
操作符
重载
,以及属性和事件。
C++中不允许被
重载
的
操作符
该运算符的含义是执行exp2和exp3中的一个,假设
重载
了,就不可以保证执行一个还是两个,还是都没执行,该运算符的跳转性质就不复存在了。根据
重载
的规则,如果
重载
该运算符,就赋予了新的语义,可能会出现混淆。“.”运算符的含义是引用对象成员,然而被
重载
后就不能保证了,导致运算符意义的混淆。
重载
的部分规则:运算函数的参数至少有一个必须是类的对象或者是类的对象的引用。假设可以
重载
,我们可以假设一种情况,创建一个对象,调用该对象的函数。5. 类成员的
重载
函数,其形参隐含一个默认的this指针。
C++运算符
重载
,+-*/的
重载
,返回值为什么是对象而不是对象的引用?而流
操作符
<< 和 >> 却返回的是引用?
原因是: +,-,*等返回不了引用,比如+运算符,可以如下
重载
(为了简单,假设A 只有int x;int y) A operator+(A a,A b) {A sum; sum.x=a.x+b.x; sum.y=a.y+b.y; return sum; } 分析不能用引用的原因: 函数传入了两个参数a,b,并且+只能传入两个参数(c++不允许自己创造运算符),这样就限
C++ 语言
65,213
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章