Как создать массив переменной родительского класса в качестве частного члена в наследующем классе - PullRequest
0 голосов
/ 30 декабря 2011

Я пытаюсь создать матричный класс, в котором каждый член является дробью;вместо того, чтобы плавать или int.Вот код для класса дроби.
фракция.h

class fraction{
private:
    int num, den;
public:
    fraction();
    fraction(int, int);
    fraction& operator=(const fraction&);
};

Fraction.cpp

#include "fraction.h"

fraction::fraction(){
   num = 0;
   den = 0;
}

fraction::fraction(int a, int b){
   num = a;
   den = b;
}
fraction& fraction::operator=(const fraction& lhs){
   num = lhs.num;
   den = lhs.den;
   return *this;
}

Я объявляю класс матрицы, как показано ниже.

#include "fraction.h"
class matrix:public fraction{
private:
   fraction **mt(int, int);
   fraction **unity(int, int);
   int sz;
public:
   matrix();
   matrix(fraction**, int);
   ~matrix();
};

Как инициализировать класс матрицы?Я пробовал много вещей, но ни одна из них, кажется, не работает.Эти указатели просто не принимают никаких значений.

Ответы [ 2 ]

1 голос
/ 30 декабря 2011

В указанном вами классе Matrix нет указателей. Кроме того, нет причин наследовать от дроби (матрица содержит дроби, но сама дробь не существует).

Чтобы избежать указателей, вы можете использовать векторы C ++, однако они являются одномерными, поэтому одной из стратегий может быть линеаризация матрицы в вектор.

#include <vector>

class Matrix {   // does *not* inherit from fraction!
  private:
    int rows_;
    int cols_;
    std::vector<Fraction> data_;

  public:
    Matrix(int rows, int cols) : rows_(rows), cols_(cols),
                                 data_(rows * cols) {}

    const Fraction& operator()(int i, int j) const {
      assert(0 <= i && i < rows_);
      assert(0 <= j && j < cols_);
      return data[i * cols_ + j];
    } 
};

Matrix m(5, 8);
cout << m(3, 1);
0 голосов
/ 30 декабря 2011

Вам нужно дважды инициировать указатель на двумерный массив, как ** mt: первая, каждая строка;во-вторых, в каждой строке столбец инициализации

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