C++基础--抽象类

 
下面,我们举一个完整的例子:
例题例11-22
#include <iostream.h>
class CPolygon {
 protected:
 int width, height;
public:
 void set_values (int a, int b)
  { width=a; height=b; }
 virtual int area (void) =0;
};

class CRectangle: public CPolygon
{
public:
 int area (void)
  { return (width * height); }
};

class CTriangle: public CPolygon
{
public:
 int area (void)
  { return (width * height / 2); }
};

int main ()
{
 CRectangle rect;
 CTriangle trgl;
 CPolygon * ppoly1 = &rect;
 CPolygon * ppoly2 = &trgl;
 ppoly1->set_values (4,5);
 ppoly2->set_values (4,5);
 cout << ppoly1->area() << endl;
 cout << ppoly2->area() << endl;
 return 0;
}

  本程序计算本输出矩形和三角形的面积,运行结果为:
  20
  10
  上面的代码中,我们用基类CPolygon指针指向派生类CRectangle和CTriangle对象,调用派生类的area成员函数,而在main函数中输出area函数的计算结果。我们也可以在CPolygon类中定义一个成员函数,用于打印计算结果,而不管是哪一个派生类的area函数的计算结果。CPolygon类修改如下:
  class CPolygon
  {
   …
  public:
   …;
   void printarea (void)
    { cout << this->area() <<endl; }
  };
并把main函数作如下修改:
  int main ()
  {
   …
   ppoly1->printarea();
   ppoly2->printarea();
   return 0;
  }
上面我们已经看到:基类Vehicle包含有自己的、具体的message虚函数的实现。在C++中,也可以在基类中仅定义虚函数的信号:函数的名字、返回类型和参数,而没有实现,但在派生类中必须有该虚函数实现。
  仅定义了函数的信号,而没有函数实现的虚函数称之为纯虚函数。定义纯虚函数的方法是在虚函数参数表右边的括号后加一个"=0"的后缀,例如:
  class vehicle
  {
   …
   virtual void message(void) = 0;
  };
  上面这段代码中,我们便把vehicle的message成员函数定义为纯虚函数。含有纯虚函数的类,我们称之为抽象类,_______。所以,抽象类也称之为抽象的基类。
  下面,我们再看一个抽象类的例子:
  class CPolygon
  {
   protected:
   int width, height;
  public:
   void set_values (int a, int b)
    { width=a; height=b; }
   virtual int area (void) =0;
};
  Cpolygon类的成员函数area被定义为纯虚函数,它返回int变量,没有参数。因为Cpolygon类包含了纯虚函数area,所以,它是一个抽象类,下面的定义:
  CPolygon poly;
是错误的。我们虽然不能定义抽象类对象,但可以定义抽象类指针,例如:
  CPolygon * ppoly1;
  CPolygon * ppoly2
是完全正确的,这是因为基类的指针可以指向派生类的对象。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值