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 êtrebign n(123);
Un novice l'a essayé et a constaté que les résultats ne sont pas différents
Espoir d'aide
Le constructeur de copie s'appelle :
Bien sûr, vous ferez une erreur après avoir commenté, et
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.