多态中,为什么要在基类中将虚函数声明为纯虚函数 或者 给出虚函数定义呢?

class Base {
public:
    virtual void show() {
      printf("Base\n");
    }
    //为什么需要声明为纯虚函数
    //virtual float get_num() = 0;
    virtual float get_num() { return 0;};
};

class B1 : public Base {
public:
    B1():num(58){};
    void show() {
      printf("B1\n");
    }
    float get_num() {
      return num;
    }
private:
    float num;
};

int main() {
  Base* base = new B1;
  //B1 b1;
  //Base* base = &b1;
  base->show();

  float num = base->get_num();
  printf("num=%f\n", num);
  return 0;
}

DF6B3091-72FF-448E-B957-2D27BE43B221.png

做如下修改:
D39EB5E8-11EE-4E13-982E-54F4E8155B9B.png

阅读 1.5k
1 个回答

还有纯虚函数的类是不能直接生成对象的。如果不希望其直接生成对象化,而是只能生成子类的对象,那么就可以在里面放几个纯虚函数。

纯虚函数有没有实现也是看需求的。纯虚函数可以没有实现。但是如果有必要提供一个默认实现,那也可以有实现,供子类使用。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题