zoukankan      html  css  js  c++  java
  • Visitor模式的C++实现

    Visitor模式
    #include <iostream>
    #include 
    <string>

    class emp;
    class boss;
    class visitor
    {
    public:
        visitor(){};
        
    ~visitor(){};
        
    virtual void visit( emp * emp ) {};
        
    virtual void visit( boss * ss ) {};
    };


    class emp
    {
        
    int m_sdays, m_vdays;
        
    float m_salarys;
        std::
    string m_name;
    public:
        emp(std::
    string name, float salary, int sdays, int vdays):m_name(name),m_salarys(salary),m_sdays(sdays),m_vdays(vdays) { };
        
    ~emp(){};

        std::
    string getname() {return m_name; };
        
    float getsalary() {return m_salarys ; };
        
    int getsdays() {return m_sdays; } ;
        
    int getvdays() {return m_vdays; } ;

        
    virtual void accept(visitor *v) { v->visit(this);};

    };


    class boss:public emp
    {
    public:
        
    virtual void accept(visitor *v) { v->visit(this);};
    };


    class vacvisitor:public visitor
    {
        
    int m_totalvdays;
    public:
        vacvisitor():m_totalvdays(
    0){};
        
    ~vacvisitor(){};
        
    int gettotalvdays(){ return m_totalvdays; } ;
        
    virtual void visit( emp * emp ) { m_totalvdays += emp->getvdays(); };
        
    virtual void visit( boss * boss ) { m_totalvdays += boss->getvdays(); };

    };

    int main()
    {
        emp array[
    2= {emp("a",10012 ),emp("b",10012 )};

        vacvisitor 
    * vc = new vacvisitor();

        
    for (int i = 0; i< sizeof(array)/sizeof(emp) ; i++)
        {
            array[
    0].accept(vc);
        }

        std::cout 
    << vc->gettotalvdays()<<std::endl;

        getchar();

        
    return 0;
    }
  • 相关阅读:
    python安装
    道德准则
    工作职场
    30岁之前
    互联网产品
    项目经理催活指南
    项目中如何找到优先级,以及工作时间安排
    语音行业相关概念
    cookie sessionStorage localStorage 的异同
    数组中map,forEach和for循环的区别
  • 原文地址:https://www.cnblogs.com/mumuliang/p/1885655.html
Copyright © 2011-2022 走看看