谁帮忙解释一下操作符重载。

atllover 2003-10-09 11:42:31
我开始看了一些,这个知识,操作符重载,主要的应用(c++)试哪个方面呀。
MyType operator+(MyType opp,MyType ood)
这是重载‘+‘的。
前面的MyType示返回值,后面的两个MyType是参数。
我胡乱写的,不只对否。
也和一般的函数时很相似的。
...全文
41 13 打赏 收藏 转发到动态 举报
写回复
用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
  • 打赏
  • 举报
回复
浅拷贝不合适时,就必须提供成员赋值运算符号,即重载赋值运算符,

64,671

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧