c ++继承类的麻烦

时间:2013-10-17 23:15:01

标签: c++

我是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'没有类型。

提前致谢。

1 个答案:

答案 0 :(得分: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一样,即不能有常规变量,只有指向它的指针