-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 回答