c++规定 函数动态绑定 需要使用虚函数来实现。 具体的实现方法是:动态联编 使用对象的引用或对象的指针 来操作 虚函数,  但是如果使用对象 来操作虚函数的话,仍然会采用静态联编的方式。

#include<iostream>
using namespace std;
class A
{

public:
	virtual void printA()
	{
		cout<<"A:printA()"<<endl;
	}
};
class B :public A
{
public :
	virtual  void printA()
	{
		cout<<"B:printA()"<<endl;
	}
};
void printAB(A &aa)
{
	aa.printA();
}
int main()
{
    A a= A();
    B b= B();
    A *pab=b;//pab 表示是一个指针 是A 类型的 但是指向了B类对象
   // B *pba=a;  如果不注释起来 会报错 ,因为只可以用父类的指针 指向子类的对象;而子类的                  //  指针不可以指向父类的对象
    
    pab->printA();//通过对象的指针 来使用 虚函数,实现动态联编,结果会是 B:printA()
    //也可以使用 引用来对操作
     
     A &aa = b;
     printAB(aa);//效果与 aa.printA() 一样 都是 执行了 B:printA(); 
    
    return 0;
}



其实 之所以会有 动态联编这种模式的出现  ,就是因为 项目经理 会定义出 父类的操作,而员工 需要实现出 具体的 子类中与父类中对应的操作的实现, 而并不需要使用父类的操作, 所以动态联编的结果 基本上都是 使用 父类的指针或者引用 来指向或者引用 子类的对象,从而达到 实现子类操作的目的。