Problèmes avec les fonctions de constructeur lors de l'écriture de modèles de haute précision à l'aide de structures C++
三叔
三叔 2017-06-12 09:24:48
0
1
1015

Confusion sur les opérateurs de surcharge de structure

#include #include #include #include using namespace std; const int N = 1005; struct bign { int len,s[N]; bign() { memset(s,0,sizeof(s)); len=1; } bign(int num) { *this=num; } bign(char *num) { *this=num; } bign operator =(int num) { char c[N]; sprintf(c,"%d",num); *this=c; return *this; } bign operator =(const char *num) { len=strlen(num); for (int i=0;i1&&!s[len-1]) len--; } bign operator +(const bign &b) { bign c; c.len=0; for (int i=0,g=0;g||i=0) g=0; else{ x+=10; g=1; }; c.s[c.len++]=x; } c.clean(); return c; } bign operator *(const bign &b) { bign c; c.len=len+b.len; for (int i=0;i=0;i--) if (s[i]!=b.s[i]) return s[i]>(istream &in,bign &x) { string s; in>>s; x=s.c_str(); return in; } ostream& operator <<(ostream &out,bign &x) { out<>a>>b; // cout<

dans

bign(int num) { *this=num; } bign(char *num) { *this=num; }

Quelle est la fonction ?
Si vous supprimez ces deux instructions, la compilation peut toujours se dérouler normalement mais

bign n=123;

compilera les erreurs, mais

bign n; n=123;

Il peut être compilé normalement
L'initialisation de la structure ne devrait pas être
bign n(123);
Un novice l'a essayé et a constaté que les résultats ne sont pas différents
Espoir d'aide

.
三叔
三叔

répondre à tous (1)
伊谢尔伦

Citation d'un article : http://www.cnblogs.com/chio/a…. L'affectation s'effectue entre deux objets existants, tandis que l'initialisation consiste à créer un nouvel objet, et sa valeur initiale provient d'un autre objet existant. Le compilateur fera la distinction entre ces deux situations, en appelant l'opérateur d'affectation surchargé lors de l'affectation et en appelant le constructeur de copie lors de l'initialisation. S'il n'y a pas de constructeur de copie dans la classe, le compilateur en fournira un par défaut. Ce constructeur de copie par défaut copie simplement chaque membre de la classe.

bign n=123;

Le constructeur de copie s'appelle :

bign(int num) { *this=num; }

Bien sûr, vous ferez une erreur après avoir commenté, et

bign n; n=123;

Le constructeur par défaut est appelé en premier, puis l'opérateur d'affectation est appelé, il n'y a donc rien de mal après avoir commenté les deux fonctions.

Vous pouvez le déboguer vous-même.

    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal
    À propos de nous Clause de non-responsabilité Sitemap
    Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!