运算符的重载

元明 2000-03-17 10:24:00
加精
运算符的重载我不能很好的理解,到底都能应用在什末地方,请尽量通俗些,以以下的程序为例.
#include <stream.h>
typedef enum{red,green,amber} traffic_light_color;
struct intersection
{
traffic_light_color traffic_light;
int number_cars_queued;
int cumulative_numbers_cars;
friend ostream &operator << (ostream &s, intersection &light);
};

ostream &operator << (ostream &s, intersection &light)
{
switch(light.traffic_light)
{
case red: return (s << "red");
case green: return (s << "green");
case amber: return (s << "yellow");
}
}

intersection network[50];

main()
{
netword[1].traffic_light = amber;
cout << "\nThe light at the 2nd intersection is" << network[1];
}
...全文
262 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
luckybat 2000-04-03
  • 打赏
  • 举报
回复
我认为运算符的重载的确是娱乐的成分居多,以前我是很喜欢花费精力装饰一下自己的代码的,但目前流行的类库体系(如VCL)好象都不太注重运算符重载,可能是因为那样的可读性会很差,在加上新增的一些语法成分如property会导致这个问题复杂化。
我倾向于使用Assign()这样一种直白的方法取代传统的operator=重载。
std_ream 2000-03-30
  • 打赏
  • 举报
回复
首先,运算符重载是一个娱乐玩具(引自thinking in C++),在语言中已定义了许多运算符,运算符就象一个函数,参与运算的是它的参数,它们都有一定的类型。
当你用你自己的类型时,你想用这个运算符,你必须重载它。
它唯一的用处可以就是能使你的代码变得更简单(否则你必须用函数代替它)、易读。
bluesky 2000-03-23
  • 打赏
  • 举报
回复
运算符的重载的主要目的是为了程序中的表达式的格式的统一和表达的简练,其本质是类的成员函数或类的友员函数.类的成员函数
为动态联编,类的友员函数为静态联编.
class array
{
private:
// 声明私有友员
public:
void operator =(array x);//声明类的成员函数
friend array operator + (array x,array y);//声明类的友员函数
}
当运算符的操作数为一声明类的成员函数或类的友员函数,而操作数为二时声明类的友员函数,否则易出错.
光明山人 2000-03-18
  • 打赏
  • 举报
回复
运算符的重载是为了表达式更符合人的习惯,比如C/C++中没有对复数的加减乘除运算,如果你定义了复数类,则可以重载+-*/来进行复数对象变量的运算,以使它们更可观些。

<<是C++中的流输出操作符,重载它可使你自己定义的新类型方便地输出,可以与其他类型的数据同时放在流输出表达式中,使得程序更清晰。如可以与串、数字一起输出。

--------------------
 阿贵
    跳出三界外
    不在五行中
--------------------


王释之 2000-03-18
  • 打赏
  • 举报
回复
前面两位说的很对!
运算符的重载是为了表达复杂的结构!
编译包括静态和动态两种:
运算符的重载是静态;友元类是动态的。
王释之 2000-03-18
  • 打赏
  • 举报
回复
静态是编译前,而动态是编译后
有一段时间不碰c++,忘了大部分,不好意思!
以后给你补上!
元明 2000-03-18
  • 打赏
  • 举报
回复
谢谢三位的答复,在此我想再问一下befresh朋友,运算符的重载是静态,友元类是动态,能具体再说一下吗?fupf88朋友,此程序重载后的结果应为yellow吧.阿贵朋友,你说的还不够详细,不过我已知重载是怎末一会儿事,你应该更详细的举一个例子,等到befresh回答完了后,我会给你们分的.
fupf88 2000-03-17
  • 打赏
  • 举报
回复
如果不重载<<的话,will print:
The light at the 2nd intersection is 2
now will print:
The light at the 2nd intersection is amber
C++已经定义了<<的用法,但你可以用自己的定义,而符号仍用<<,
这时就需对其定义重载了


69,335

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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