中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++訪問者模式

發布時間:2020-07-04 22:13:48 來源:網絡 閱讀:537 作者:Chinayu2014 欄目:編程語言

Visitor.h文件內容如下:

訪問者和元素之間互以對方為參數

#ifndef __VISITOR__  
#define __VISITOR__  
  
#include <iostream>  
#include <string>  
#include <vcl.h>  
using namespace std;  
  
class Element;  
  
  
///訪問者接口類  
class Visitor  
{  
  public:  
    virtual void Visit(Element *e) = 0;  
};  
  
//具體訪問者A  
class VisitorOne : public Visitor  
{  
  public:  
    //實現訪問接口,參數為元素,在類外面實現函數體  
    virtual void Visit(Element *e);  
};  
  
//具體訪問者B  
class VisitorTwo : public Visitor  
{  
  public:  
    //實現訪問接口,參數為元素,在類外面實現函數體  
    virtual void Visit(Element *e);  
};  
  
//=========================================================  
//Element類  
class Element  
{  
  public:  
    virtual void Accept(Visitor *v)  
    {  
        v->Visit(this);//調用訪問者接口  
    }  
  
    char* GetName()  
    {  
        return (char*)m_name.c_str();  
    }  
  
  public:  
    //類中待訪問的元素  
    string m_name;  
  
};  
  
//具有個性數據的元素  
class ElementA: public Element  
{  
  public:  
    ElementA(string s)  
    {  
        m_name = s;//傳入父類成員m_name中  
    }  
};  
  
class ElementB : public Element  
{  
  public:  
    ElementB(string s)  
    {  
        m_name = s;  
    }  
};  
  
//=========================================================  
//訪問者類one對元素處理方法(須聲明到Element類的后面否則編譯不能通過)  
void VisitorOne::Visit(Element *e)  
{  
    //獲取元素中的數據  
    char * data = e->GetName();  
    char szTemp[] = "正在處理數據:";  
    strcat(szTemp,data);  
    char  szTip[] = "第一個訪問者";  
    MessageBox(0,+szTemp,szTip,0);  
}  
//訪問者類two對元素的處理方法  
void VisitorTwo::Visit(Element *e)  
{  
    //獲取元素中的數據  
    char * data = e->GetName();  
    char  szTemp[] = "正在處理數據:";  
    strcat(szTemp,data);  
    char  szTip[] = "第二個訪問者";  
    MessageBox(0,+szTemp,szTip,0);  
}  
  
#endif

調用方法如下:

ElementA ea("元素A");  
ElementB eb("元素B");  
  
VisitorOne va;  
VisitorTwo vb;  
  
// 雙分派,“接受者”和“訪問者”決定了一個操作  
ea.Accept(&va);  
ea.Accept(&vb);  
  
eb.Accept(&va);  
eb.Accept(&vb);


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

波密县| 桃江县| 新晃| 仲巴县| 肇州县| 武胜县| 会理县| 华安县| 鹤岗市| 独山县| 甘南县| 奉贤区| 牟定县| 蛟河市| 陇西县| 抚松县| 临清市| 永仁县| 波密县| 墨玉县| 含山县| 汉源县| 抚顺市| 吉林省| 柘城县| 防城港市| 五华县| 英德市| 宜黄县| 海安县| 元朗区| 禄丰县| 肥城市| 广宗县| 通海县| 株洲市| 东至县| 巧家县| 阳泉市| 襄城县| 玛多县|