Ваша проблема в конструкторе:
LongNumber::LongNumber(const char * source )
{
...
// you are declaring a new local variable called `number` here
char* number = new char[digits+1];
strcpy( number, source );
...
}
Вы не копируете в переменную-член класса с именем number
, вы объявляете новую локальную переменную в теле конструктора и используете ее. Переменная члена класса не используется и, вероятно, не определена. Для элемента указателя это означает, что значением может быть любое недопустимое значение - тогда, когда вы вызываете print:
void LongNumber::print()
{
cout<<number<<endl;
// when I try to print with the same line of code here..it crashes
}
number
, который вы здесь используете, является переменной члена класса, которая, как мы сказали, не определена. В этом случае вызов cout
завершится сбоем, поскольку он попытается использовать этот неверный указатель.
Исправление состоит в том, чтобы заставить конструктор использовать правильную переменную члена класса:
LongNumber::LongNumber(const char * source )
{
...
// use the class member variable `number` here
number = new char[digits+1];
strcpy( number, source );
...
}