zoukankan      html  css  js  c++  java
  • [编程灵光]通过“向雷锋同志学习”完成对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.子类的虚函数可替父类虚函数默默工作,且外界不易察觉。
  • 相关阅读:
    Python的socket模块详解
    C语言中输入输出重定向,freopen的用法和实例
    JPG BMP TIF PNG 图像编码压缩率和编解码时间比较
    FFMPEG 内部YUV转RGB过程
    STL 中的数据结构
    FFmpeg 深度学习 livevideoStack 笔记
    Docker 编译tensorflow-1.14.0 静态库
    CMake 笔记
    Torch 学习
    Docker 学习笔记
  • 原文地址:https://www.cnblogs.com/Exesoft-Mike/p/11648530.html
Copyright © 2011-2022 走看看