C'est vraiment à se demander si tu comprend le code que tu écris ou si tu le fais exprès...
Je reprend donc ton code "ligne par ligne" pour t'indiquer les différents problèmes et ce que font ces liges:
1-
1 2
| int *tabl;
tabl=new int[Nblignes]; |
créent dynamiquement un tableau de NbLignes entiers nommé tabl
2-
1 2 3 4
| for(i=0;i<Nblignes;i++)
{
tabl[i]=tab[i];
} |
copient les valeurs des éléments de tab dans tabl, jusque là, tout va bien... Mais les choses se corsent après:
3-
1 2 3 4
| for(i=0;i<Nblignes;i++)
{
tabl[i]=vecter.tab[i];
} |
copient le contenu de vecter.tab dans tabl...
C'est à dire que cela remplace les valeurs des éléments de tabl que tu viens justement de donner... par les éléments de vecter.tab...
Ce n'est pas ce que tu veux faire: tu voudrais surement additionner les deux valeurs...
4-
vecteur resultat (*tabl);
Cette ligne crée un vecteur en appelant vecteur::vecteur(int), en lui passant... la valeur du premier élément de tabl (ce qui revient au même que de lui passer tabl[0])...
A partir d'ici, on entre donc dans la fonction vecteur::vecteur(int)... qu' est le constructeur
Regardons maintenant ce que fait vecteur::vecteur(int):
5- déclare une variable de type entier nommée i, soit
cout<<"\n\n Construction du vecteur \n";
provoque un affichage... pas vraiment utile, mais bon...
6-Entre dans une boucle pour laquelle la décision d'y retourner sera évaluée en fin de boucle (en 10)
7-
1 2
| if ((n < min)||(n > max))
{ |
Si n, qui correspond, dans le cas présent, à la valeur du premier élément de tabl, est plus petit que min et plus petit que max (définis respectivement à 1 et 100)
8-
cout <<" \n\n le nombre d'elements du vecteur doit etre compri entre "<<min <<" et " <<max;
nous affiche que le nombre d'éléments du vecteur doit être compris entre 1 et 100...
Tiens, je croyais que c'était la valeur du premier élément du tableau créé dans l'opérateur +
Et tu nous le confirme encore bien, en affichant
9-
1 2
| cout << "\n \nVeuillez recommencer \n";
cout << "\n \nNombre d elements du vecteur "; |
et en attendant une introduction de la part de l'utilisateur
Et tu fais cela...
10-
1 2
| }
}while((n<min)||(n>max)); |
jusqu'à ce que n soit effectivement compris entre min et max (respectivement entre 1 et 100)...
retourne en (6) si ce n'est pas le cas
11-
cout <<" \n\nle nombre d'elements du vecteur est : "<<n<<"\n";
Une fois que tu es content, tu nous confirme encore bien que c'est le nombre d'éléments du vecteur...
12-Tu alloue dynamiquement la mémoire pour un nouveau tableau composé de n éléments
13-
1 2
| for(i=0;i<n;i++)
tab[i]=0; |
Tu initialise les différents éléments du tableau à 0
14-
1 2
| for(i=0;i<n;i++)
cout <<" \n\nl element " <<i+1 <<" du vecteur est : " <<tab[i]<<"\n" |
Et tu affiche la valeur de ces éléments... que tu viens d'initialiser à...0...
15-On quite le constructeur:
Nblignes vaut strictement n'importe quoi, mais a peu de chances de valoir n
On perd la valeur de n, mais comme on ne sais plus trop s'il s'agissait du premier élément de tabl (comme le laisse supposer l'appel du constructeur) ou le nombre d'élément du tableau (comme le laisse supposer le code du constructeur), finalement, quelle importance
Nous revenons ici dans la fonction operator +
16-Tu renvoies le vecteur nouvellement créé, qui contient surement quelque chose, mais qui ne contient surement ni les valeur de l'un des vecteur d'origine ni, et encore moins, des éléments représentant la somme des éléments respectifs de ces deux vecteurs...
Comme on quitte la fonction, on perd "toute trace de tabl, et nous avons, en plus, une jolie fuite mémoire...
Alors, si, en plus, on met (1) en relation avec (15), on se rend compte que Nbligne vaut... strictement n'importe quoi, mais ne représente surement pas le nombre d'éléments qu'il y a dans le tableau...
Bref, nous partons en couille intégrale dans toute la logique...
Partager