2011-07-24 4 views
2

Je suis venu dans une définition de fonction à partir de:S'il vous plaît expliquer la fonction suivante

int operator*(vector &y) 
{ 
    // body 
} 

Après avoir mis * juste après l'opérateur et avant d'ouvrir croisillon de l'argumentation, qu'est-ce que cette fonction signifie?

Répondre

7

Il s'agit d'une surcharge operator *. La syntaxe que vous devez utiliser est *(y) tandis que y est de type vector.

Il vous permet une référence comme la mise en œuvre, quelque chose de similaire à la référence du pointeur dans C. Bien sûr, la signification réelle dépend du corps. par exemple. vous pouvez renvoyer une référence à un élément interne du vecteur.

1

Il s'agit d'une surcharge de fonction pour l'opérateur *.

0

Sa surcharge de fonction surchargeant l'opérateur de référence *.

-2

En fait ce n'est pas un opérateur de déferencing comme dans * ptr! C'est en fait un opérateur tel qu'un opérateur de multiplication. Voici un exemple simple

#include <iostream> 
using namespace std; 

struct Int{ 
int val; 
Int(const int val = 0) : val(val){} 
int operator*(const Int& number)const{ 
    return val * number.val; 
} 
}; 

int main(){ 
    Int n(4), m(5); 
    cout << n * m << endl; //use the operator*() implicitly 
    cout << (n.operator*(m)) << endl; //use the operator* explicitly 
} 

Pour définir un opérateur de défreinage, son prototype serait operator *(). Regardez here pour plus d'informations. Here est un code à suivre en direct.

+0

La plupart des opérateurs surchargés peuvent être définis comme des fonctions non membres, et unary * ne fait pas exception. http://ideone.com/sPixf Si c'est une fonction membre, oui, c'est binaire *, mais comme indiqué unaire * est plus probable. –

+0

Oh attends oui tu as raison, je ne me suis pas rendu compte que c'était une fonction régulière. – dchhetri

0

Il s'agit d'un opérateur de déréférencement ou d'un opérateur de multiplication. C'est déréférencer si c'est dans un espace de noms et multiplier si c'est dans une classe. Comme il a un corps et pas de portée de classe, je suppose aussi que c'est un déréférencement.

Questions connexes