如何在继承类中创建父类变量数组作为私有成员

时间:2011-12-30 04:22:44

标签: c++ class inheritance pointers operator-overloading

我正在尝试创建一个矩阵类,其中每个成员都是一个分数;而不是浮点数或int。这是分数类的代码 fraction.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 个答案:

答案 0 :(得分:1)

您定义的Matrix类中没有指针。此外,没有理由继承Fraction(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);

答案 1 :(得分:0)

你需要初始化两个数组指针,如** mt两次:首先,每一行;第二,在每一行,init列