Динамическое размещение матрицы с использованием классов возвращает что-то вроде «21.684268-3121» - PullRequest
0 голосов
/ 25 апреля 2018
class Vector {
protected:
    unsigned int dim;
    float *a;
public:
    Vector() {
        a = NULL;
        dim = 0;
    }
    Vector(const unsigned int& x) {
        dim = x;
        a = new float[dim];
        for (unsigned int index = 0; index < x; index++) {
            cin >> a[index];
        }
    }
    Vector(const float *init, const unsigned int& size) {
        if (init) {
            dim = size;
            a = new float[size];
            for (unsigned int index = 0; index < size; index++) {
                a[index] = init[index];
            }
        }
    }
    void initVector(const float *init, const unsigned int& size) {
        if (init) {
            dim = size;
            a = new float[size];
            for (unsigned int index = 0; index < size; index++) {
                a[index] = init[index];
            }
        }
    }
    void initVector(const unsigned int& size) {
        dim = size;
        a = new float[dim];
        for (unsigned int index = 0; index < size; index++) {
            cin >> a[index];
        }
    }
    unsigned int getDim() {
        return dim;
    }
    float operator[](unsigned int pos) {
        return a[pos];
    }
    ~Vector() {
        delete[] a;
    }
    friend class Matrice;
    friend istream& operator>>(istream&, Vector&);
};

class Matrice {
protected:
    Vector *v;
public:
    Matrice() {
        v = NULL;
    }
    Vector operator[](int pos) {
        return v[pos];
    }
    friend istream& operator>>(istream&, Matrice&);
};

class Matrice_oarecare : public Matrice
{
protected:
    unsigned int linii;
public:
    Matrice_oarecare() {
        linii = 0;
    }
    Matrice_oarecare(int coloane, int linii) {
        this->linii = linii;
        v = new Vector[linii];
        for ( int index = 0; index < linii; index++) {
            cin >> v[index]; //Asta apeleaza >> pentru Vector, care citeste toate numerele din sir
        }
    }
    friend istream& operator>>(istream& in, Matrice_oarecare&a);
    friend ostream& operator<<(ostream& out, Matrice_oarecare&a);
};

class Matrice_patratica : public Matrice {
    unsigned int dim;
public:
    Matrice_patratica() {
        v = NULL;
        dim = 0;
    }
    Matrice_patratica(unsigned int dim) {
        this->dim = dim;
        v = new Vector[dim];
        for (unsigned int index = 0; index < dim; index++) {
            float *init = new float[dim];
            for (unsigned index2 = 0; index2 < dim; index2++)
                cin >> init[index];
            v[index].initVector(init, dim);
        }
    }
    friend ostream& operator<<(ostream&, Matrice_patratica&);
};

istream& operator>>(istream& in, Vector& v) {
    in >> v.dim;
    v.a = new float[v.dim];
    for (unsigned int i = 0; i < v.dim; i++)
        in >> v.a[i];
    return in;
}

ostream& operator<<(ostream& os, Matrice_oarecare& a) {
    for (unsigned indexI = 0; indexI < a.v->getDim(); indexI++) {
        for (unsigned indexJ = 0; indexJ < a.linii; indexJ++) {
            os << a[indexI][indexJ];
        }
    }
    return os;
}
ostream& operator<<(ostream& os, Matrice_patratica& a) {
    for (unsigned indexI = 0; indexI < a.dim; indexI++) {
        for (unsigned indexJ = 0; indexJ < a.dim; indexJ++) {
            os << a[indexI][indexJ];
        }
    }
    return os;
}
int main() {
    Matrice_oarecare c(2,2);
    cout << c << endl;
    return 0;
}

У меня возникли проблемы при попытке динамического выделения матрицы.Что бы я ни писал, он возвращает что-то вроде '21 .3244141e-48198' и спрашивает почему.Я думаю, что проблема может быть либо перегруженным оператором <<, либо одним наследованием.Matrice_oarecare и Matrice_patratica должны наследовать класс Matrice, и я должен создать их, используя класс Vector. </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...