首页 > 代码库 > c++之虚函数(动态绑定技术)

c++之虚函数(动态绑定技术)

 虚函数

   1.虚函数的思想借鉴于Simula语言,可以实现运行的多态。虚函数允许派生类重载、覆盖,即使访问对象所使用的指针类型是基类型,但依旧能调用派生类的相应函数。当使用对象指针或对象引用调用虚函数时,采用动态绑定技术。

    2.virtual 关键字只能用在虚函数的声明中,在函数的定义中不能使用

 

      

class Shape
{
     public:
      virtual void draw();
};
void Shape::draw(){cout<<"这是Shape->draw."<<endl;}

class Circle:public Shape
{
  public:
     virtual void draw();
};
void Circle::draw(){cout<<"这是Circle->draw."<<endl;}


class Rectangle:public Shape
{
  public:
      virtual void draw();
};
void Rectangle::draw(){cout<<"这是Rectangle->graw."<<endl;}

void paint(Shape *px)//注意这里的参数类型
{
px->draw();      //这会输出shape->draw()??????
}

 

int main()
{
Circle *pa = new Circle();
Rectangle *pb = new Rectangle();

paint(pa);
paint(pb);
delete pa;
delete pb;
return 0;
}

结果:

这是Circle->draw.

这是Rectangle->draw.//////////////////////////////??这是结果,都是虚函数的功劳。

 

动 态 绑 定

C++的多态建立在动态绑定的基础之上。而虚函数表用来解决动态绑定问题。动态绑定的后台运作机制就是基于虚函数表。