Spiegazione dello snippet di codice, operatore di parole chiave in, in c ++, uso di oggetti nelle classi [chiuso]

-2
class Vector { 
          public: 
           Vector(int s) :elem{new double[s]}, sz{s} { }
           double& operator[](int i) { return elem[i]; } //function 2
           int size() { return sz; } 

            private: 
                double∗ elem;  
                int sz; 
         };

Snippet di codice da: c ++ prog. lingua 4a edizione, Bjarne IDE: Microsoft Visual Studio Professional 2013 La mia esperienza: principiante, ho imparato un po 'usando turbo c ++ prima.

Ho notato durante la digitazione di function2 che operator è una parola chiave (mostrata in blu), ma quando viene dichiarata l'intera funzione2, operator diventa bianca, cioè non rimane più una parola chiave.

Se provo a utilizzare un altro nome diverso da "operator", viene visualizzato un errore, che dice Errore: l'array di funzioni non è consentito

Sarebbe molto utile se qualcuno potesse spiegare cosa sta succedendo nella funzione2, voglio sapere tutto ciò che c'è riguardo all'operatore della parola chiave, perché, come e quando usarlo. Il lavoro dal punto di vista di un principiante.

Si prega di astenersi da risposte eccessivamente complesse, sono completo newbie

Ho provato a cercare su internet, non riuscivo a trovare altro oltre all'overloading dell'operatore, che non è una mia domanda.

double read_and_sum(int s) { 
                        Vector v(s);                     //line 1
                        for (int i=0; i!=v.size(); ++i) 
                        cin>>v[i];                        //line 3
                        double sum = 0; 
                        for (int i=0; i!=v.size(); ++i) 
                        sum+=v[i];
                         return sum;
                        }

Qui line1 passa l'argomento "s" del tipo int richiesto dal costruttore del vettore di classe, va bene.

Ma in line3 come può essere valida la frase "cin > v [i]"? , poiché l'oggetto v non è dichiarato come una matrice di oggetti. Anche se è valido dove va il valore ..?

Fondamentalmente è fuori dalla mia conoscenza, per favore spiega la linea3 nel modo più semplice possibile e nel modo più esauriente possibile, in modo che io possa imparare.

PS: Non dirmi che non dovrei imparare c ++, o non dovrei usare quell'IDE o qualcos'altro del genere. Se puoi, rispondi alla domanda, sarò molto grato.

    
posta Code Blooded 27.03.2014 - 18:07
fonte

1 risposta

0

Ciò che viene chiamato overloading dell'operatore . Stai sovraccaricando l'operatore [] con un nuovo metodo. Quindi, in sostanza, operator è una parola chiave condizionale qui. Non è possibile utilizzarlo come metodo o nome di variabile, ma può fare riferimento a esso per definire un sovraccarico dell'operatore. Quindi è riservato in alcune situazioni, ma non in altre, come nell'esempio sopra.

E per spiegare l'overloading dell'operatore: stai aggiungendo operatori a una classe in modo che possa fare quella funzionalità quando usi la sintassi specifica associata a quell'operatore.

Quindi, in questo caso, stiamo aggiungendo l'operatore di accesso agli array alla classe, quindi possiamo usare quella funzionalità come se fosse una matrice.

Esempi di operatori che puoi sovraccaricare:

  • addizione (+)
  • sottrazione (-)
  • moltiplicazione (*)

e così via.

In sostanza, l'overloading dell'operatore consente a una classe di agire come un altro tipo di oggetto. Qualsiasi tipo di operazione, come aggiunta, assegnazione, incremento, decremento, confronti (& lt ;, & gt ;,! =, ==, ecc.), E così via, sono operatori che possono essere sovraccaricati. Questo ti permette di scrivere una classe e di essere in grado di usare quella sintassi, come newObj > oldObj, invece di chiamare un metodo, come newObj- > IsGreaterThan (oldObj).

    
risposta data 27.03.2014 - 18:17
fonte

Leggi altre domande sui tag