-2

C++初心者なのでアドバイスお願いします。

次の基本クラスがあります。

class IMatriz {
    int **m;
    int numRows;
    int numColumns;
public:
    IMatriz() {
        numRows = 0;
        numColumns = 0;
        m = NULL;
    }
    IMatriz(int r, int c) {
        numRows = r;
        numColumns = c;
        m = new int* [numRows];
        for(int i = 0; i < numRows; i++) {
            m[i] = new int [numColumns];
        }
    }
    virtual void setSize(int r, int c) = 0;
    virtual void setValue(int row, int col, int val) = 0;
    virtual int getValue(int row, int col) = 0;
    virtual int getNumRows() = 0;
    virtual int getNumColumns() = 0;
    virtual void mult(IMatriz a, IMatriz b) = 0;
    virtual void print(void) = 0;
};

継承されたクラスをどのように宣言するのか疑問に思っています。

IMatriz() に問題があります。コンパイラから、「ISO C++ は型のない IMatriz の宣言を禁止しています」というメッセージが表示されます。

前もって感謝します。

4

1 に答える 1

0
 class IMatriz {
 protected:
  int **m;
  int numRows;
  int numColumns;
 public:
 IMatriz() {
    numRows = 0;
    numColumns = 0;
    m = NULL;
 }
 IMatriz(int r, int c) {
    numRows = r;
    numColumns = c;
    m = new int* [numRows];
    for(int i=0; i<numRows; i++)
      m[i] = new int [numColumns];
  }

virtual void setSize(int r, int c) = 0;
virtual void setValue(int row, int col, int val) { m[row][col] = val; }
virtual int getValue(int row, int col){ return m[row][col]; }
        int getNumRows(){ return numRows;}
        int getNumColumns(){ return numColumns; }
virtual void mult(IMatriz* a, IMatriz* b) = 0;
virtual void print(void) = 0;
};

class Child: public IMatriz{
 public:
   Child():IMatriz(){}
   Child(int row, int col):IMatriz(row, col){}
 };
  1. コンパイル エラーは、純粋仮想関数を持つクラスを直接インスタンス化できないためです。ポインターを使用する必要があります。そのため、mult() の定義が変更されました。
  2. 派生クラスでは、純粋仮想関数の定義を提供する必要があります。それ以外の場合、子クラスは IMatriz と同じように抽象クラスになります。つまり、通常の変数を持つことはできず、それへのポインターのみを持つことができます。
于 2013-10-17T23:29:28.690 に答える