Hallo zusammen
Für mein Informatik2 Praktikum sollten wir eine Klasse safe_int schreiben, in der Zahlbereichsüberschreitungen während des Rechnes mit Integerzahlen erkannt werden. Dieses Programm habe ich mit viel Unterstützung zum Laufen gekriegt. In der neuen Aufgabe sollen wir die bisher als friend vereibarten Operatorfunktionen in Komponentenfunktionen umwandeln und die Klasse dann noch erweitern. Allerdings habe ich keine Ahnung wie das funktioniert bzw. wie ich das aufschreiben soll. Ich poste mal die Klasse safe_int und eine Operatorfunktion safe_int operator+:
class safe_int{
private:
int val; //der eigentliche Zahlwert eines safe_int
static const string limit_string; //die max Zahl als String (21474.....)
static string lim_to_string(); //die Umwandelfunktion für zahl in string
static int divi(int,int);
static int mod(int,int);
public:
static const int lim; //die max Zahl als in (21474......)
class overflow { //die Fehlerklasse
public:
int op1,op2;
char func[30];
overflow(char *f,int i,int j){
op1=i;
op2=j;
strcpy(func,f);
}
};//of class overflow
safe_int(string zahl); //der Stringkonstruktor
safe_int() throw() {val=0;} //der Defaultkonstruktor
friend safe_int operator+(safe_int,safe_int); //Um diese Funktion geht es!
friend safe_int operator-(safe_int,safe_int);
friend safe_int operator*(safe_int,safe_int);
friend safe_int operator/(safe_int,safe_int);
friend safe_int operator%(safe_int,safe_int);
friend ostream& operator<<(ostream&,safe_int);
friend istream& operator>>(istream&,safe_int&);
};
Alles anzeigen
Und im Anschluss gleich die friend safe_int operator+(safe_int,safe_int) Funktion:
safe_int operator+(safe_int a,safe_int b){
safe_int erg;
if((b.val>0 && a.val>safe_int::lim-b.val) || (b.val<0 && -a.val>safe_int::lim+b.val)){
throw safe_int::overflow("Addition",a.val,b.val);
}
erg.val=a.val+b.val;
return erg;
}
Es wäre super wenn mir jemand diese Operatorfunktion in eine Komponentenfunktion umwandeln könnte. Das geht bestimmt sehr leicht, allerdings haben im Semester aus Krankheitsgründen die Profs gewechselt und der neue ist ein Buch mit sieben Siegeln. Nicht nur für mich
thx
Epi