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;
}其实 之所以会有 动态联编这种模式的出现 ,就是因为 项目经理 会定义出 父类的操作,而员工 需要实现出 具体的 子类中与父类中对应的操作的实现, 而并不需要使用父类的操作, 所以动态联编的结果 基本上都是 使用 父类的指针或者引用 来指向或者引用 子类的对象,从而达到 实现子类操作的目的。
本文出自 “xingNalLu” 博客,请务必保留此出处http://781588100.blog.51cto.com/9429625/1559681
原文地址:http://781588100.blog.51cto.com/9429625/1559681