重载运算符的语法

编程入门 行业动态 更新时间:2024-10-21 03:41:30
本文介绍了重载运算符的语法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

你好, 在看到一些关于运算符重载的例子后,我仍然对一般语法感到困惑。以下是我的想法,而不是 确定它是否正确。 1.对于一个一元运算符,它是一个类的成员,它的形式是 通常 " operatorP()" (其中P是运营商的名字)。 如果它是非会员运营商,那么它的表格是 operatorP(arg) 2.对于一个二元运算符,它是一个类的成员,其形式为: operatorP(arg), 其中arg是P的正确参数。 如果它是非会员运营商,那么它的形式是 " operatorP(argLeft,argRight)" 有什么我错过的吗?此外,我可以超载三元 运算符吗?我认为只有一个三元运算符,即a? b:c。 非常感谢, Jess

解决方案

* Jess:

> 看到一些关于运算符重载的例子之后,我仍然对一般语法感到困惑。以下是我的想法,而不是 确定它是否正确。 1.对于一个一元运算符,它是一个类的成员,它的形式是 通常 " operatorP()" (其中P是运营商的名字)。 如果它是非会员运营商,那么它的表格是 operatorP(arg) 2.对于一个二元运算符,它是一个类的成员,其形式为: operatorP(arg), 其中arg是P的正确参数。 如果它是非会员运营商,那么它的形式是 " operatorP(argLeft,argRight)" 有什么我错过的吗?

对于operator ++和operator--你通过一个虚拟int第二个参数来区分前缀和 后缀形式。

此外,我可以重载三元运算符吗?

No.

我认为只有一个三元运算符,是a? B:C" ;.

是的。 - 答:因为它弄乱了订单人们通常会阅读文字。 问:为什么这么糟糕? A:热门帖子。 问:什么是在usenet和电子邮件中最烦人的事情是什么?

Jess写道:

看了一些关于运算符重载,我仍然有点混淆了一般语法。以下是我的想法,而不是 确定它是否正确。 1.对于一个一元运算符,它是一个类的成员,它的形式是 通常 " operatorP()" (其中P是运营商的名字)。

在文献中你会发现''''用来代替''''。

如果它是非会员运营商,那么它的表格是 " operatorP(arg)" 2.对于一个二元运算符,它是一个类的成员,它的形式是: operatorP(arg), 其中arg是P.的正确论据。 如果它是非会员运营商,那么它的形式是 " operatorP(argLeft ,argRight)" 有什么我错过的吗?

不是。重载运算符也可以使用const参数, 所以当它是成员时,它可以有''rv operator @()const''。

此外,我可以重载三元 运算符吗?

No.你也不能超载''。''(点),也不能''sizeof''。你也可以可能不应该超逻辑OR和逻辑AND(你可以,然而, )。

我认为只有一个三元运算符,即a? b:c。

正确。 V - 请在通过电子邮件回复时删除资本''A' 我没有回复最热门的回复,请不要问

Victor Bazarov写道:

另外你 可能不应该超载逻辑OR和逻辑AND(你可以, 但是)。

这是一个建议,因为最常见的情况是你b $ b可能想要超载||和&&是支持这样的表达式: MyClass a,b; ... if(a || b)。 .. 这样做更好,而不是在''MyClass'中定义一个operator bool() ?

Hello, After seeing some examples about operator overloading, I''m still a bit confused about the general syntax. The following is what I think, not sure whether it''s correct. 1. For a unary operator that''s a member of a class, its form is usually "operatorP()" (where P is the operator''s name). If it''s a non-member operator, then its form is "operatorP(arg)" 2.For a binary operator that''s a member of a class, its form is: operatorP(arg), where arg is the right argument of P. If it''s a non-member operator, then its form is "operatorP(argLeft,argRight)" Is there anything I''ve missed? Moreover, can I overload a ternary operator? I think there''s only one ternary operator, which is "a ? b:c". Many thanks, Jess

解决方案

* Jess:

> After seeing some examples about operator overloading, I''m still a bit confused about the general syntax. The following is what I think, not sure whether it''s correct. 1. For a unary operator that''s a member of a class, its form is usually "operatorP()" (where P is the operator''s name). If it''s a non-member operator, then its form is "operatorP(arg)" 2.For a binary operator that''s a member of a class, its form is: operatorP(arg), where arg is the right argument of P. If it''s a non-member operator, then its form is "operatorP(argLeft,argRight)" Is there anything I''ve missed?

For operator++ and operator-- you differentiate between prefix and postfix forms via a dummy int second argument.

Moreover, can I overload a ternary operator?

No.

I think there''s only one ternary operator, which is "a ? b:c".

Yes. -- A: Because it messes up the order in which people normally read text. Q: Why is it such a bad thing? A: Top-posting. Q: What is the most annoying thing on usenet and in e-mail?

Jess wrote:

After seeing some examples about operator overloading, I''m still a bit confused about the general syntax. The following is what I think, not sure whether it''s correct. 1. For a unary operator that''s a member of a class, its form is usually "operatorP()" (where P is the operator''s name).

In literature you''ll find ''@'' is used instead of ''P''.

If it''s a non-member operator, then its form is "operatorP(arg)" 2.For a binary operator that''s a member of a class, its form is: operatorP(arg), where arg is the right argument of P. If it''s a non-member operator, then its form is "operatorP(argLeft,argRight)" Is there anything I''ve missed?

Not really. Overloaded operators can take const arguments as well, so when it''s a member, it can have the form ''rv operator@() const''.

Moreover, can I overload a ternary operator?

No. Neither can you overload ''.'' (dot), nor ''sizeof''. Also you probably shouldn''t overload logical OR and logical AND (you may, however).

I think there''s only one ternary operator, which is "a ? b:c".

Right. V -- Please remove capital ''A''s when replying by e-mail I do not respond to top-posted replies, please don''t ask

Victor Bazarov wrote:

Also you probably shouldn''t overload logical OR and logical AND (you may, however).

Is this a recommendation because the most common case where you might want to overload || and && is to support expressions like: MyClass a, b; ... if(a || b) ... and this is better done by instead defining an "operator bool()" in ''MyClass''?

更多推荐

重载运算符的语法

本文发布于:2023-06-03 12:18:26,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/473778.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:语法   运算符

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!