Operatori in C e C++: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Riga 14:
Nel caso degli operatori, il numero degli operandi e la priorità dell’operatore sovraccaricato sono le stesse dell’operatore predefinito, mentre il nuovo operatore può essere definito come una funzione membro oppure come una ''funzione friend'' (funzione amica).
 
== TabellaTabelle degli operatori ==
Nelle tabelle seguenti, <code>a</code>, <code>b</code> e <code>c</code> rappresentano valori validi qualsiasi (''literals'', valori da variabili, oppure ''return value'') o, in alcuni casi specifici, nomi di oggetti o ''lvalues''. <code>R</code>, <code>S</code> e <code>T</code> indicano qualsiasi tipo, mentre <code>K</code> indica un tipo di classe o un tipo ''enum''.
 
Riga 25:
! colspan="2" |Esempi di implementazione in C++
|-
!Come membro di unadella classe K
!Fuori dalla classe
|-
Riga 99:
! colspan="2" |Esempi di implementazione in C++
|-
!Come membro di unadella classe K
!Fuori dalla classe
|-
Riga 135:
 
=== Operatori logici (o booleani) ===
Tutti gli operatori logici (o [[Booleano (informatica)|booleani]]<ref>L'accezione ''booleana'' è stata coniata in onore del matematico [[George Boole]]. </ref>) sono esistenti sia in [[C (linguaggio di programmazione)|C]] che in [[C++]] e possono essere chiaramente sovraccaricati solo in quest'ultimo linguaggio di programmazione. sebbene
 
Nonostante la possibilità di sovraccarico in C++, tale operazione è sconsigliata con AND logico e OR logico sia sconsigliato perché, come operatori sovraccaricati, si comporterebbero come normali chiamate di funzione, il che significa che ''entrambi'' i loro operandi verrebbero valutati, perdendo di conseguenza la loro importante [[valutazione di McCarthy]]. <ref>{{Cita web|url=https://isocpp.org/wiki/faq/operator-overloading}}</ref>
Riga 143:
! colspan="2" | Esempi di implementazione in C++
|-
! Come membro di unadella classe K
! Fuori dalla classe
|-
Riga 170:
! colspan="2" |Esempi di implementazione in C++
|-
!Come membro di unadella classe K
!Fuori dalla classe
|-
Riga 204:
|}
 
=== Operatori ed espressioni di assegnazioneassegnamento ===
TutteTutti gli operatori e le espressioni di assegnazioneassegnamento esistonosono esistenti sia in [[C e(linguaggio di programmazione)|C]] che in [[C++]] e possono essere chiaramente sovraccaricate solo in C++quest'ultimo linguaggio di programmazione.
 
Per gli operatori indicati, la semantica dell'espressione di assegnazione combinata incorporata <code>a ⊚= b</code> è equivalente a <code>a = a ⊚ b</code>, eccetto per il fatto che <code>a</code> viene valutata una sola volta.
{| class="wikitable" style="width:100%"
|+
! rowspan="2" |Operator name
! rowspan="2" |SyntaxTipologia assegnamento
! colspanrowspan="2" |C++ prototype examplesSintassi
! colspan="2" |Esempi di implementazione in C++
|-
!Come membro della classe K
!As member of K
!Fuori dalla classe
!Outside class definitions
|-
!Espressione semplice di assegnamento
!Direct assignment
| style="text-align:center;" |{{Tutto attaccato|1=<code>a '''=''' b</code>}}
|{{cpp|1=<code>R& K::'''operator''' =(S b);}}</code>
| {{ND}}
|-
! rowspan="210" |OperatorAssegnamenti namecomposti
!Addition assignment
| align="center" |<code>a '''+=''' b</code>
|{{cpp|1=<code>R& K::operator +=(S b);}}</code>
|{{cpp|1=<code>R& operator +=(K& a, S b);}}</code>
|-
|<code>a '''-=''' b</code>
!Subtraction assignment
| style="text-align:center;" |<code>aR& K::operator '''-='''(S b);</code>
|{{cpp|1=<code>R& K::operator -=(K& a, S b);}}</code>
|{{cpp|1=R& operator -=(K& a, S b);}}
|-
|<code>a '''*=''' b</code>
!Multiplication assignment
| style="text-align:center;" |<code>aR& K::operator '''*='''(S b);</code>
|{{cpp|1=<code>R& K::operator *=(K& a, S b);}}</code>
|{{cpp|1=R& operator *=(K& a, S b);}}
|-
|<code>a '''/=''' b</code>
!Division assignment
| style="text-align:center;" |<code>aR& K::operator '''/='''(S b);</code>
|{{cpp|1=<code>R& K::operator /=(K& a, S b);}}</code>
|{{cpp|1=R& operator /=(K& a, S b);}}
|-
|<code>a '''%=''' b</code>
!Modulo assignment
| style="text-align:center;" |<code>aR& K::operator '''%='''(S b);</code>
|{{cpp|1=<code>R& K::operator %=(K& a, S b);}}</code>
|{{cpp|1=R& operator %=(K& a, S b);}}
|-
|<code>a '''&=''' b</code>
!Bitwise AND assignment
| style="text-align:center;" |<code>aR& K::operator '''&='''(S b);</code>
|{{cpp|1=<code>R& K::operator &=(K& a, S b);}}</code>
|{{cpp|1=R& operator &=(K& a, S b);}}
|-
|<code>a '''<nowiki>|</nowiki>=''' b</code>
!Bitwise OR assignment
| style="text-align:center;" |<code>a '''<nowiki>R& K::operator |=(S b);</nowiki>=''' b</code>
|{{cpp|1=<code><nowiki>R& K::operator {{!}}|=(K& a, S b);|lang=cpp}}</nowiki></code>
|{{cpp|1=R& operator {{!}}=(K& a, S b);|lang=cpp}}
|-
|<code>a '''^=''' b</code>
!Bitwise XOR assignment
| style="text-align:center;" |<code>aR& K::operator '''^='''(S b);</code>
|{{cpp|1=<code>R& K::operator ^=(K& a, S b);}}</code>
|{{cpp|1=R& operator ^=(K& a, S b);}}
|-
|<code>a '''<<=''' b</code>
!Bitwise left shift assignment
| style="text-align:center;" |<code>aR& K::operator '''<<='''(S b);</code>
|{{cpp|1=<code>R& K::operator <<=(K& a, S b);}}</code>
|{{cpp|1=R& operator <<=(K& a, S b);}}
|-
|<code>a '''>>=''' b</code>
!Bitwise right shift assignment
| style="text-align:center;" |<code>aR& K::operator '''>>='''(S b);</code>
|{{cpp|1=<code>R& K::operator >>=(K& a, S b);}}</code>
|{{cpp|1=R& operator >>=(K& a, S b);}}
|}