[C++] Błąd w destruktorze i/lub przeciążenie operatora+
Ostatnio zmodyfikowano 2015-11-06 18:40
adacek1 Temat założony przez niniejszego użytkownika |
[C++] Błąd w destruktorze i/lub przeciążenie operatora+ » 2015-11-06 11:51:08 Klasa Number #include <string> #define DEFAULT_LEN 10
class Number { public: Number(); Number( std::string number, int iLen = DEFAULT_LEN ); Number( const Number & Other ); ~Number(); Number operator +( const Number & Other ); void vPrint(); private: int len; int * tab; void vSetNull(); int iCharToInt( char c ); };
#include "Number.h" #include <iostream>
Number::Number() { len = DEFAULT_LEN; tab = new int[ len ]; vSetNull(); }
Number::Number( std::string number, int iLen ) { len = iLen; tab = new int[ len ]; for( int i = 0; i < len; i++ ) { int num = iCharToInt( number[ i ] ); tab[ i ] = num; } }
Number::Number( const Number & Other ) { if( this != & Other ) { len = Other.len; tab = new int[ len ]; for( int i = 0; i < len; i++ ) { tab[ i ] = Other.tab[ i ]; } } }
Number::~Number() { delete tab; }
Number Number::operator +( const Number & Other ) { Number tmp; for( int i = 0; i < len; i++ ) { tmp.tab[ i ] = tab[ i ] + Other.tab[ i ]; } return Number( tmp ); }
void Number::vSetNull() { for( int i = 0; i < len; i++ ) tab[ i ] = 0; }
int Number::iCharToInt( char c ) { switch( c ) { case '0': return 0; case '1': return 1; case '2': return 2; case '3': return 3; case '4': return 4; case '5': return 5; case '6': return 6; case '7': return 7; case '8': return 8; case '9': return 9; default: return - 1; } } void Number::vPrint() { std::cout << "\n\nWYNIK: "; for( int i = 0; i < len; i++ ) { std::cout << tab[ i ] << ","; } std::cout << std::endl; }
Metoda main #include "Number.h"
int main() { Number a( "0123456789", 10 ), b( "0123456789", 10 ); Number c; a.vPrint(); b.vPrint(); c = Number( a + b ); c.vPrint(); system( "pause" ); return 0; }
Problem: Wypisanie wartości a i b jest ok problem jest z wartością c wypisuje jasiek bzdury a na koniec wyskakuje błąd w destruktorze (chyba usuwam już usunięty wskaźnik "pi), z góry dziękuje za pomoc. |
|
pekfos |
» 2015-11-06 16:36:39 Nie masz zaimplementowanego operatora przypisania. |
|
carlosmay |
» 2015-11-06 17:14:59 Jak alokujesz pamięć na tablicę to zwalniasz też pamięć na tą tablicę delete[] tab; |
|
j23 |
» 2015-11-06 18:40:22 Dodam tylko: int Number::iCharToInt( char c ) { switch( c ) { case '0': return 0; case '1': return 1; case '2': return 2; case '3': return 3; case '4': return 4; case '5': return 5; case '6': return 6; case '7': return 7; case '8': return 8; case '9': return 9; default: return - 1; } } |
KISS int Number::iCharToInt( unsigned char c ) const { return( c < 10 ) ? c - '0' : - 1; } Number::Number( std::string number, int iLen ) |
Po co dałeś parametr iLen, przecież std::string ma metodę size? |
|
« 1 » |