虚函数:
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++的多态建立在动态绑定的基础之上。而虚函数表用来解决动态绑定问题。动态绑定的后台运作机制就是基于虚函数表。
c++之虚函数(动态绑定技术),布布扣,bubuko.com
原文地址:http://www.cnblogs.com/Ohero/p/3737632.html