Как создать параметр класса в виде динамического массива и присвоить ему значение?

Рейтинг: -1Ответов: 1Опубликовано: 12.03.2023

Вроде бы сделал класс, перегрузил вывод для него, но после вывода мне выдаётся следующее: value_print: Length: 2, Number: 3 -33686019, хотя ожидалось value_print: Length: 2, Number: 2 3. Если я в методе factor_digits присвою counter=-1, то будет выведено value_print: Length: 2, Number: 2 -33686019.

Я как-то неправильно массив инициализирую в конструкторе, или объявил неверно (int* number;), или неправильно его заполняю?

Код в наличии:

#include <iostream>
#include "vector"
#include "string"
#include "algorithm"
class RandomAccuracyNumber {
private:
    int length;
    int* number; // array of int
    void factor_digits(int num, int* number, int counter = 0)
    {
        if (num == 0)
            return;
        int d = num % 10;
        factor_digits(num / 10, number, counter);
        number[counter] = d;
        counter++;
    }
public:
    RandomAccuracyNumber(int length = 0, int number = 0) {
        this->length = length;
        this->number = new int(length);

        factor_digits(number, this->number);

        cout << "default constructor for " << this << endl;
    }
friend ostream& operator << (ostream& os, RandomAccuracyNumber& v) {
        os << "Length: " << v.length << ", ";
        os << "Number: ";
        for (int i = 0; i < v.length; i++)
        {
            os << v.number[i] << ' ';
        }
        os << endl;

        return os;
    }
};
void printValue(RandomAccuracyNumber value) {
    cout << "value_print: " << value << endl;
}
RandomAccuracyNumber globalValue = RandomAccuracyNumber(2, 23);
int main() {
    printValue(globalValue);
    system("Pause");
    return 0;
}

Ответы

▲ 1Принят

Поменяйте местамии строки!

    number[counter] = d;
    counter++;
    factor_digits(num / 10, number, counter);

А то вы старательно все перезаписывали в один и тот же элемент массива.