c++設計模式-->訪問者模式

#include <iostream>
#include <string>
#include <memory>
using namespace std;class AbstractMember; // 前向聲明// 行為基類
class AbstractAction {
public:virtual void maleDoing(AbstractMember* member) = 0;virtual void femaleDoing(AbstractMember* member) = 0;virtual ~AbstractAction() {}
};class Anger : public AbstractAction {
public:void fight() {cout << "I want to fight" << endl;}void warning() {cout << "I am warning" << endl;}void maleDoing(AbstractMember* member) override;void femaleDoing(AbstractMember* member) override;
};class Horror : public AbstractAction {
public:void help() {cout << "I need help" << endl;}void think() {cout << "I am thinking" << endl;}void maleDoing(AbstractMember* member) override;void femaleDoing(AbstractMember* member) override;
};// 抽象成員基類
class AbstractMember {
public:virtual void accept(AbstractAction* action) = 0;virtual ~AbstractMember() {}AbstractMember(string name) : mName(name) {}string getName() {return mName;}
protected:string mName;
};class maleMember : public AbstractMember {
public:using AbstractMember::AbstractMember;void accept(AbstractAction* action) override {action->maleDoing(this);}
};class femaleMember : public AbstractMember {
public:using AbstractMember::AbstractMember;void accept(AbstractAction* action) override {action->femaleDoing(this);}
};// Anger and Horror methods implementation
void Anger::maleDoing(AbstractMember* member) {cout << "I am " << member->getName() << endl;fight();
}void Anger::femaleDoing(AbstractMember* member) {cout << "I am " << member->getName() << endl;warning();
}void Horror::maleDoing(AbstractMember* member) {cout << "I am " << member->getName() << endl;think();
}void Horror::femaleDoing(AbstractMember* member) {cout << "I am " << member->getName() << endl;help();
}int main() {unique_ptr<AbstractMember> maleAnger = make_unique<maleMember>("Luffy");unique_ptr<AbstractAction> angerAction = make_unique<Anger>();maleAnger->accept(angerAction.get());unique_ptr<AbstractMember> maleHorror = make_unique<maleMember>("Zoro");unique_ptr<AbstractAction> horrorAction = make_unique<Horror>();maleHorror->accept(horrorAction.get());unique_ptr<AbstractMember> femaleAnger = make_unique<femaleMember>("Nami");femaleAnger->accept(angerAction.get());unique_ptr<AbstractMember> femaleHorro = make_unique<femaleMember>("luobi");femaleHorro->accept(horrorAction.get());
}

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/13586.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/13586.shtml
英文地址,請注明出處:http://en.pswp.cn/web/13586.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

OrangePiKunPengPro | 開發板學習與使用

OrangePi KunPengPro | 開發板學習與使用 時間:2024年5月23日20:51:12 文章目錄 `OrangePi KunPengPro` | 開發板學習與使用1.參考2.資料2.使用2-1.通過串口登錄系統2-2.通過SSH登錄系統2-3.安裝交叉編譯工具鏈2-4.復制文件到設備1.參考 1.OrangePi Kunpeng Pro Orange Pi官網…

c語言指針入門(二)

今天學習了指針的兩個常用場景&#xff0c;在此記錄&#xff0c;以便后續查看。 場景1&#xff1a;傳數組 在c語言中&#xff0c;我們在定義函數的時候是沒有辦法直接傳一個數組進去的&#xff0c;為了解決這個問題&#xff0c;我們一般將數組的名稱當作一個指針參數傳入到函數…

mysql主從復制的步驟和使用到的操作命令有哪些?

步驟&#xff1a; 配置主服務器&#xff08;Master&#xff09;&#xff1a; 啟用二進制日志記錄&#xff08;binary logging&#xff09;。配置主服務器的唯一標識&#xff08;server-id&#xff09;。創建用于復制的專用復制賬戶。 配置從服務器&#xff08;Slave&#xff0…

安裝Pnetcdf順便升級autoconf與automake

Netcdf NetCDF&#xff08;Network Common Data Form&#xff09;是一種用于存儲科學數據的文件格式和軟件庫。它是一種自描述、可移植且可擴展的數據格式&#xff0c;廣泛應用于氣象學、海洋學、地球科學和其他領域的科學研究。 NetCDF文件以二進制形式存儲&#xff0c;結構…

Qt | QGridLayout 類(網格布局)

01、上節回顧 Qt | QBoxLayout 及其子類(盒式布局)02、QGridLayout 簡介 1、網格布局原理(見下圖): 基本原理是把窗口劃分為若干個單元格,每個子部件被放置于一個或多個單元格之中,各 單元格的大小可由拉伸因子和一行或列中單元格的數量來確定,若子部件的大小(由 sizeH…

Vue從入門到實戰 Day08~Day10

智慧商城項目 1. 項目演示 目標&#xff1a;查看項目效果&#xff0c;明確功能模塊 -> 完整的電商購物流程 2. 項目收獲 目標&#xff1a;明確做完本項目&#xff0c;能夠收獲哪些內容 3. 創建項目 目標&#xff1a;基于VueCli自定義創建項目架子 4. 調整初始化目錄 目…

網絡安全之BGP詳解

BGP&#xff1b;邊界網關協議 使用范圍&#xff1b;BGP范圍&#xff0c;在AS之間使用的協議。 協議的特點&#xff08;算法&#xff09;&#xff1a;路徑矢量型&#xff0c;沒有算法。 協議是否傳遞網絡掩碼&#xff1a;傳遞網絡掩碼&#xff0c;支持VLSM&#xff0c;CIDR …

【15】編寫shell-安裝mysql

說明: 1、請注意mysql版本的壓縮包格式 2、請注意掛載data盤 3、請注意部署包和shell腳本放在同一個文件夾 4、實現shell腳本自動化部署mysql5.7.40版本 # !/bin/bash#****************************************************** # Author : 秋天楓葉35 # Last modified …

Spring Boot 中 對話 Redis

Redis 是一款開源的&#xff0c;使用 C 開發的高性能內存 Key/Value 數據庫&#xff0c;支持 String、Set、Hash、List、Stream 等等數據類型。它被廣泛用于緩存、消息隊列、實時分析、計數器和排行榜等場景。基本上是當代應用中必不可少的軟件&#xff01; Spring Boot 對 Re…

oracle正則的使用

1、建表 create table person (first_name varchar2(20),last_name varchar2(20),email varchar2(40),zip varchar2(20)); insert into PERSON (first_name, last_name, email, zip) values (Steven, Chen, stevenhp.com, 123456); insert into PERSON (first_name, last_name…

ASP+ACCESS基于B2C電子商務網站設計

摘 要 運用ASP技術結合了Access數據庫原理&#xff0c;基于B/S模式我們開發了一個網上購物系統。在我們的系統中&#xff0c;顧客可以很方便的注冊成為會員&#xff0c;對商品進行瀏覽檢索&#xff0c;查看商品的詳細資料&#xff0c;然后根據各人的喜好購買心儀的商品。系統…

CCF20220901——如此編碼

CCF20220901——如此編碼 代碼如下&#xff1a; #include<bits/stdc.h> using namespace std; int main() {int n,m,cnt1,a[1000],c[1000]{1};cin>>n>>m;for(int i1;i<n;i){cin>>a[i];cnt*a[i];c[i]cnt;}int b[1000]{0};for(int i1;i<n;i)b[i](…

JPHS-JMIR Public Health and Surveillance

文章目錄 一、期刊簡介二、征稿信息三、期刊表現四、投稿須知五、投稿咨詢 一、期刊簡介 JMIR Public Health and Surveillance是一本多學科期刊&#xff0c;專注于公共衛生創新與技術的交叉領域&#xff0c;包括公共衛生信息學、監測&#xff08;監測系統和快速報告&#xff…

CCF20220601——歸一化處理

CCF20220601——歸一化處理 代碼如下&#xff1a; #include<bits/stdc.h> using namespace std; int main() {int n,a[1000],sum0;scanf("%d",&n);for(int i1;i<n;i){scanf("%d",&a[i]);suma[i];}double aver1.0,b0.0,d1.0;aversum/(n*1…

Java基礎(三)- 多線程、網絡通信、單元測試、反射、注解、動態代理

多線程基礎 線程&#xff1a;一個程序內部的一條執行流程&#xff0c;只有一條執行流程就是單線程 java.lang.Thread代表線程 主線程退出&#xff0c;子線程存在&#xff0c;進程不會退出 可以使用jconsole查看 創建線程 有多個方法可以創建線程 繼承Thread類 優點&#x…

【學習】實驗室服務器常用的Linux指令。

1. 下載GitHub代碼。 使用代碼&#xff1a; git clone https://github.com/Turoad/CLRNet.git2. 壓縮 / 解壓。 打包壓縮 是日常工作中備份文件的一種方式 在不同操作系統中&#xff0c;常用的打包壓縮方式是不同的選項 含義 Windows 常用 rarMac 常用 zipLinux 常用 tar.gz…

學碩都考11408的211院校!河北工業大學計算機考研考情分析!

河北工業大學&#xff08;Hebei University of Technology&#xff09;&#xff0c;簡稱河北工大&#xff0c;坐落于天津市&#xff0c;由河北省人民政府、天津市人民政府與中華人民共和國教育部共建&#xff0c; 隸屬于河北省&#xff0c;是國家“雙一流”建設高校、國家“211…

自動化測試在軟件開發生命周期中如何提高代碼質量?

自動化測試是一種在軟件開發生命周期中使用軟件工具來執行測試的方法&#xff0c;它可以大大提高代碼質量&#xff0c;減少開發過程中的錯誤和缺陷。本文將從零開始&#xff0c;詳細且規范地介紹如何使用自動化測試來提高代碼質量。 第一步&#xff1a;明確測試目標 在開始自…

webgl入門-繪制三角形

繪制三角形 前言 三角形是一個最簡單、最穩定的面&#xff0c;webgl 中的三維模型都是由三角面組成的。咱們這一篇就說一下三角形的繪制方法。 課堂目標 理解多點繪圖原理。可以繪制三角形&#xff0c;并將其組合成多邊形。 知識點 緩沖區對象點、線、面圖形 第一章 web…

Python高克勒-曼寧-斯特里克勒公式計算一維流量

&#x1f4dc;曼寧公式-用例 &#x1f4dc;Python流體數據統計模型和淺水滲流平流模型模擬 | &#x1f4dc;Python蒸發散物理問題(微積分-線性代數-拉普拉斯和傅立葉變換) ??Python計算一維流量 高克勒-曼寧-斯特里克勒公式公式基于一維&#xff08;橫截面平均&#xff09…