为什么我的基类指针变量不能从派生类访问函数?

COD*_*ror 0 c++ inheritance

class Polygon {
  protected:
    int width, height;
  public:
    void set_values (int a, int b)
      { width=a; height=b; }
};

class Rectangle: public Polygon {
  public:
    int area()
      { return width*height; }
};

int main () {
  Rectangle rect;
  Polygon * ppoly1 = ▭
  ppoly1->set_values (4,5);
  cout << rect.area() << '\n';
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,ppoly1指向什么以及该指针如何无法访问矩形类的函数?

为什么ppoly1-> area()是一个错误

谢谢!

Jar*_*Par 6

表达式ppoly1->area()是一个错误,因为ppoly1键入的语句Polygon没有area声明方法.当C++试图评估这个成员时,它基本上是在Polygon看不到任何成员命名时开始area,因此发出错误

听起来你想给Polygon类型一个area没有实现的方法的概念(强制派生类型提供一个).如果是这种情况,那么您应该声明一个未实现的虚拟方法Polygon

class Polygon { 
  ...
  virtual ~Polygon() { } 
  virtual int area() = 0;
};
Run Code Online (Sandbox Code Playgroud)