17.9 Operators

王朝other·作者佚名  2006-05-21
窄屏简体版  字體: |||超大  

An operator is a member that defines the meaning of an expression operator

that can be applied to instances of

the class. Operators are declared using operator-declarations:

operator-declaration:

attributesopt operator-modifiers operator-declarator operator-body

operator-modifiers:

operator-modifier

operator-modifiers operator-modifier

operator-modifier:

public

static

extern

operator-declarator:

unary-operator-declarator

binary-operator-declarator

conversion-operator-declarator

unary-operator-declarator:

type operator overloadable-unary-operator ( type identifier )

overloadable-unary-operator: one of

+ - ! ~ ++ -- true false

Chapter 17 Classes

255

binary-operator-declarator:

type operator overloadable-binary-operator ( type identifier , type

identifier )

overloadable-binary-operator: one of

+ - * / % & | ^ << >> == != > < >= <=

conversion-operator-declarator:

implicit operator type ( type identifier )

explicit operator type ( type identifier )

operator-body:

block

;

There are three categories of overloadable operators: Unary operators (§17.9

.1), binary operators (§17.9.2), and

conversion operators (§17.9.3).

When an operator declaration includes an extern modifier, the operator is

said to be an external operator.

Because an external operator provides no actual implementation, its

operator-body consists of a semi-colon. For

all other operators, the operator-body consists of a block, which specifies

the statements to execute when the

operator is invoked. The block of an operator must conform to the rules for

value-returning methods described in

§17.5.8.

The following rules apply to all operator declarations:

? An operator declaration must include both a public and a static modifier.

? The parameter(s) of an operator must be value parameters. It is a

compile-time error for an operator

declaration to specify ref or out parameters.

? The signature of an operator (§17.9.1, §17.9.2, §17.9.3) must differ

from the signatures of all other operators

declared in the same class.

? All types referenced in an operator declaration must be at least as

accessible as the operator itself (§10.5.4).

? It is an error for the same modifier to appear multiple times in an

operator declaration.

Each operator category imposes additional restrictions, as described in the

following sections.

Like other members, operators declared in a base class are inherited by

derived classes. Because operator

declarations always require the class or struct in which the operator is

declared to participate in the signature of

the operator, it is not possible for an operator declared in a derived

class to hide an operator declared in a base

class. Thus, the new modifier is never required, and therefore never

permitted, in an operator declaration.

Additional information on unary and binary operators can be found in §14.2.

Additional information on conversion operators can be found in §13.4.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航