Il s'agit d'un programme de base pour obtenir deux nombres à 5 chiffres sous forme de chaîne et utiliser l'addition sur les 2 chiffres en utilisant la surcharge de l'opérateur sur '+'.(Requête C++) Accès global aux objets instanciés
#include <iostream>
#include <limits>
#include <cstdlib>
#include <cstring>
#include <sstream>
using namespace std;
class IntStr
{
int InputNum;
public:
//IntStr();
IntStr::IntStr(int num);
IntStr operator+ (const IntStr &);
//~IntStr();
void Display();
};
IntStr::IntStr(int num)
{
InputNum = num;
}
void IntStr::Display()
{
cout << "Number is (via Display) : " << InputNum <<endl;
}
IntStr IntStr::operator+ (const IntStr & second) {
int add_result = InputNum + second.InputNum;
return IntStr(add_result);
}
int main()
{
string str;
bool option = true;
bool option2 = true;
while (option)
{
cout << "Enter the number : " ;
if (!getline(cin, str))
{
cerr << "Something went seriously wrong...\n";
}
istringstream iss(str);
int i;
iss >> i; // Extract an integer value from the stream that wraps str
if (!iss)
{
// Extraction failed (or a more serious problem like EOF reached)
cerr << "Enter a number dammit!\n";
}
else if (i < 10000 || i > 99999)
{
cerr << "Out of range!\n";
}
else
{
// Process i
//cout << "Stream is: " << iss << endl; //For debugging purposesc only
cout << "Number is : " << i << endl;
option = false;
IntStr obj1 = IntStr(i);
obj1.Display();
}
}//while
while (option2)
{
cout << "Enter the second number : " ;
if (!getline(cin, str))
{
cerr << "Something went seriously wrong...\n";
}
istringstream iss(str);
int i;
iss >> i; // Extract an integer value from the stream that wraps str
if (!iss) //------------------------------------------> (i)
{
// Extraction failed (or a more serious problem like EOF reached)
cerr << "Enter a number dammit!\n";
}
else if (i < 10000 || i > 99999)
{
cerr << "Out of range!\n";
}
else
{
// Process i
//cout << "Stream is: " << iss << endl; //For debugging purposes only
cout << "Number is : " << i << endl;
option2 = false;
IntStr obj2 = IntStr(i);
obj2.Display();
//obj1->Display();
}
}//while
//IntStr Result = obj1 + obj2; // --------------------> (ii)
//Result.Display();
cin.get();
}
Besoin d'éclaircissements sur les points (i) & (ii) dans le code ci-dessus ...
(1) Qu'est-ce que (i) en réalité?
(2) (ii) -> Ne compile pas .. comme l'erreur "obj1 non déclaré (première utilisation de cette fonction)" se lève. Est-ce parce que obj1 & obj2 sont déclarés seulement dans les boucles while? Comment puis-je y accéder globalement?
Wow ne savait pas à propos de l'opérateur!() Surcharge, merci! –
Eh bien, je n'ai pas non plus, mais dans ce genre de cas, il est facile de vérifier la documentation ... – Klaim
Compris la partie 'échouer'. Mais ne devrions-nous pas vérifier quelque chose sur ces lignes: Soit 'abc' l'opération "iss >> i;" Maintenant, ne devrions-nous pas vérifier si (! Abc), puis dire 'cerr << "Entrez un nombre dammit! \ N";' ??? Comment justifions-nous de vérifier si (! Iss), parce que, de toute façon, iss existe. C'est juste que l'extraction de la stringstream à integer que nous devons vérifier .. Suis-je clair? – halluc1nati0n