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