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

C++ 如何在继承类中创建父类变量数组作为私有成员,c++,class,inheritance,pointers,operator-overloading,C++,Class,Inheritance,Pointers,Operator Overloading,我试图创建一个矩阵类,其中每个成员都是一个分数;而不是浮点或整数。下面是分数类的代码。 分数.h class fraction{ private: int num, den; public: fraction(); fraction(int, int); fraction& operator=(const fraction&); }; 分数.cpp #include "fraction.h" fraction::fraction(){ n

我试图创建一个矩阵类,其中每个成员都是一个分数;而不是浮点或整数。下面是分数类的代码。
分数.h

class fraction{
private:
    int num, den;
public:
    fraction();
    fraction(int, int);
    fraction& operator=(const 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();
};

如何初始化矩阵类?我试了很多东西,但似乎都不管用。这些指针不接受任何值

您定义的矩阵类中没有指针。此外,也没有理由从分数继承(矩阵包含分数,但它本身不是分数)

为了避免指针,你可以使用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);
#包括
类矩阵{//不*从分数继承!
私人:
int行;
int cols_;
std::矢量数据;
公众:
矩阵(int行,int列):行(行),列(列),
数据(行*列){}
常量分数和运算符()(int i,int j)常量{

assert(0您需要两次初始化twoD数组指针,如**mt:第一,每行;第二,在每行中,init column

继承意味着“是一个”关系。矩阵是一个分数吗?你的复制构造函数和复制赋值操作符是100%不必要的——它们完全按照隐式声明的复制构造函数和复制赋值操作符所做的,只是效率可能更低。为什么人们如此喜欢继承?90%的时间是合成>继承。编辑以避免被继承g进入这个老鼠洞:new[]只得到一个参数:数组大小。该语言让用户自行决定如何动态分配多维数组(数组数组数组、线性化等)。我正在寻找指针。如果我将矩阵线性化为向量,矩阵运算将不太直观。顺便说一句,分数类的指针有什么错?我想使用它们,因为运算符重载更容易。我看不到运算符重载和指针之间的联系。矩阵类向用户摆姿势(重载运算符)与它内部存储数据的方式(线性化)无关。这两件事可以独立更改。我编辑了示例以使用运算符()用于获取元素。我不明白你想说什么。你读过这个问题吗?我试图用matrix.cpp中的2D指针初始化分数类,每次我都会出错。我使用分数*mt;而不是分数**mt(int,int);并使用以下命令初始化。int size=10;mt=new fraction*[sizesize];例如(int row=0;row