[编程灵光]通过“向雷锋同志学习”完成对C++虚函数的引喻诠释-1

引喻(metaphore)是借着某一种熟悉的事物(喻体)来阐述另外一种不熟悉的事物(本体:比如c++代码),这两种事物可能差别很大。如果对喻体逻辑的解释辑不通,那么本体的自身逻辑极有可能是错误的。

格码大叔强调一下:我们用形象的方法阐述一个抽象道理时,如果形象的道理都说不通,那么对应的抽象道理极有可能也是错的。如果能阐述通,那么其对应的抽象喻体(即C++代码)更容易理解或者逻辑上行得通的概率大增。

假设一个喻体场景:党中央向全国发起了向雷锋同志学习的号召.党中央自身以身作则,展开了向雷锋同志学习的行动。下面的各个部门行动一致,积极响应,也都展开了向雷锋同志学习的行动。后期,党中央检查组对全国的工作展开了巡查,假设上级检查部门人力不足,部分检查工作可以委托给下面的某部门来完成。

上述喻体场景在生活中是实实在在存在的,在逻辑上是行得通的。

代码如下:

#include<iostream>
using  namespace std;
//虚函数是C++中用于实现多态(polymorphism)的机制.
//虚函数,那些被virtual关键字修饰的类成员函数,就是虚函数.
//核心理念就是通过基类访问派生类定义的函数.
//虚函数的作用,将接口与实现进行分离.
class PartyCenter //党中央类 
{    
 public: 
     virtual void  LearnFromComradeLeiFeng();
     // 党中央发起【向雷锋同志学习】的号召 
     virtual void  PartyCenterPatrol();
     // 党中央巡查组只负责后期对这个号召的执行情况的进行监督【巡查 】 
}partyCenter; 
 
 void PartyCenter::LearnFromComradeLeiFeng()
 {
     cout<<"党中央以身作则,也开始学雷锋做好人好事:慰问贫困家庭,访问敬老院,..."<<endl;
 } 
 void PartyCenter::PartyCenterPatrol()
 {
     cout<<"党中央开始了巡视检查工作."<<endl;
 } 
 
 class SubDepartmentA:public PartyCenter
 {
     void LearnFromComradeLeiFeng();     
     
 }subDepartmentA;
 //部门A需要响应号召.
  
 class SubDepartmentB:public PartyCenter
 {
     void LearnFromComradeLeiFeng();  
     void PartyCenterPatrol();  
     
 }subDepartmentB;
 //部门B需要响应号召,另外,当党中央人力不足时,可以代表党中央进行巡查工作. 
 
 void SubDepartmentA::LearnFromComradeLeiFeng()
 {
     cout<<"A下级部门响应党的号召,开始学雷锋做好人好事:打扫公共卫生,修理电器,..."<<endl; 
 }
 
 void SubDepartmentB::LearnFromComradeLeiFeng()
 {
     cout<<"B下级部门响应党的号召,开始学雷锋做好人好事:自助贫困学生,..."<<endl;   
 }
 void SubDepartmentB::PartyCenterPatrol()
 {
     cout<<"(B下级部门)代表党中央,也开始了巡视检查工作...."<<endl;     
 }
 
 int main(int argc, char* argv[])
 {
     PartyCenter *pPC;         
     pPC=&partyCenter;
     pPC->LearnFromComradeLeiFeng();
     //党中央自身:步调一致,开始向雷锋同志学习 
     pPC=&subDepartmentA;
     pPC->LearnFromComradeLeiFeng();
     //部门A:步调一致,开始向雷锋同志学习 
     pPC=&subDepartmentB;
     pPC->LearnFromComradeLeiFeng();
     //部门B:步调一致,开始向雷锋同志学习  
     
     pPC=&partyCenter;
     pPC->PartyCenterPatrol();
     //党中央巡查组开始巡查 
     pPC=&subDepartmentB;
     pPC->PartyCenterPatrol();
     //假设上级检查部门人力不足,B部门代表党中央巡查组,也开始检查 
     return 0;    
 }

向雷锋同志学习是一个【号召】,所以在PartyCenter类中需要一个【虚函数】的声明。

号召在中央本部及下面部门执行的方法内容都不一样,所以,具体虚函数定义多种多样。但步调一致,都是学雷锋。对于代码来讲,就是指针的学雷锋调用方法是一致的。

检查组去下面检查,不管是中央本部检查组,还是委托的的检查组,对于下面的被检查的人来说,分不清,检查组对外的表现形式是一样的。对于代码来讲,就是指针的巡查组调用方法都是一样的。

格码大叔对虚函数特点小结:

  • 1.父类虚函数提口号,主要由子类来实现。
  • 2.父类及子类的虚函数调用,行动步调可一致性,但具体内容呈多样性。
  • 3.子类的虚函数可替父类虚函数默默工作,且外界不易察觉。
posted on 2019-10-10 15:52  格码拓普  阅读(182)  评论(0编辑  收藏  举报