2011-12-30 133 views
0

我想创建一个矩阵类,其中每个成员都是分数;而不是一个浮点数或一个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(); 
}; 

如何初始化矩阵类?我尝试了很多东西,但没有一个似乎有效。这些指针只是不接受任何值。

+5

继承意味着“是一种”关系。矩阵是一个分数吗? – Duck 2011-12-30 04:29:51

+0

您的副本构造函数和复制赋值运算符是** 100%**不必要的 - 它们完全执行隐式声明的副本构造函数和副本分配运算符会执行的操作,可能效率更低。 – ildjarn 2011-12-30 04:44:45

+0

为什么人们如此热爱继承?组成>继承90%的时间。 – Lalaland 2011-12-30 04:44:45

回答

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

* C++没有二维数组* * – 2011-12-30 06:10:39

+0

为避免进入这个老鼠洞编辑:new []只获取一个参数:数组大小。该语言让用户了解如何动态分配多维数组(数组,数组,线性等)。 – thesamet 2011-12-30 18:23:14

+0

我正在寻找指针。如果我将矩阵线性化为一个向量,矩阵运算就不会很直观。顺便说一下,分数类的指针有什么错误?我想使用它们,因为操作符重载更容易。 – meghaljani 2011-12-30 18:38:57

0

您需要初始化二维数组指针,如** mt两次:第一行,每行;第二,在每行中,初始列

+0

我只是不明白你想说什么。你甚至读过这个问题吗?我尝试用matrix.cpp中的2D指针初始化分数类,并且每次出现错误。 – meghaljani 2011-12-30 18:40:42

+0

我使用分数** mt;而不是分数** mt(int,int);并使用以下命令初始化。 \t int size = 10; \t \t mt =新分数* [size * size]; \t \t for(int row = 0; row NullSpace 2011-12-31 22:23:08