原创 談談C++的四種“cast”類型轉換

相比於傳統的類型轉換,C++中的4種cast作用更加明確,使代碼更具有可讀性,下面就來依次介紹一下: 1.static_cast 任何具有明確定義的類型轉換,只要不包含底層const,都可以使用static_cast,這幾乎就是傳統類型轉

原创 3D數基礎:圖形與遊戲開發一書重要知識點概要

最近在看《3D數基礎:圖形與遊戲開發》,這篇博文只是大致記錄一下書中的重點知識點,後面會對每一個重點都寫一篇專門的博文來詳細介紹。本文還在持續更新中...... 第二章: 左右手座標系,unity使用左手座標系,3D MAX使用右手座標系

原创 C++虛表詳解

使用工具: 本文輸出內存模型的工具爲vs2017開發人員命令提示符,使用方法如圖所示: 我們使用cl(不是C1,不是C一,是cl,LLLLL)命令cl的語法爲: cl [filename].cpp /d1reportSingleClas

原创 C++虛繼承下帶有虛函數的類的大小(含多重虛繼承,虛繼承後完全覆蓋等複雜情況)

帶有虛函數的虛繼承的對象模型比較複雜,所以來整理一下。以下討論均在visual studio2017以及64位環境的前提下進行; 1.帶有虛函數的類 class A { public: int a_; virtual void fo

原创 設計模式(九)————外觀模式(Facade Pattern)

定義:定義一個統一的接口,用來訪問子系統中的一羣接口。外觀定義了一個高層接口,讓子系統更容易使用。 UML類圖: C++實現: #include<iostream> using namespace std; class Shape

原创 設計模式(二)————單例模式(Singleton Pattern)

定義:確保某個類只有一個實例,並且自行實例化且向所有類提供這個實例。 單例模式有六種常用的創建方式: 1.懶漢式(線程不安全) 2.懶漢式(線程安全) 3.餓漢式 4.雙重檢查/雙重校驗鎖 5.登記式/靜態內部類 6.枚舉 UML類圖:

原创 設計模式(五)————觀察者模式(Observer Pattern)

定義: 在對象之間定義一對多的關係,這樣一來,當一個對象改變狀態,所有依賴他的對象都會收到通知,並自動更新。 (在此模式中,一個目標物件管理所有相依於它的觀察者物件。並且在它本身的狀態改變時主動發出通知。這通常透過呼叫各觀察者所提供的的方

原创 設計模式(六)————命令模式(Command Pattern)

定義:將請求封裝成一個對象,從而讓你是用不同的請求把客戶端參數化,對請求排隊或者記錄請求日誌,可以提供命令的撤銷和恢復功能。 UML類圖: C++實現: #include<iostream> #include<string> #inc

原创 設計模式(八)————適配器模式(Adapter Pattern)

定義:將一個類的一組接口變換成客戶端所期待的另一種接口,從而使因接口不匹配而無法在一起工作的兩個類能夠在一起工作。類適配器通過集成被適配類和目標類,對象適配器通過組合來適配被適配者。 UML類圖: C++實現: #include<

原创 設計模式(四)————工廠方法模式(Factory Pattern)與抽象工廠方法模式(Abstract Factory Pattern)

工廠方法模式 定義:定義一個創建對象的接口,讓子類決定實例化哪一個類,工廠方法使一個類的實例化延遲到其子類。 UML類圖: C++實現: #include<iostream> using namespace std; class S

原创 設計模式(十一)————狀態模式(State Pattern)

定義:允許一個對象在其內部狀態發生改變時改變他的行爲。對象看起來似乎修改了它的類。(類的行爲是基於它的狀態改變的,使用狀態模式可以有效解決代碼中if-else和switch的case太多的問題,使代碼更容易維護) UML類圖: C++實

原创 設計模式(七)————模板方法模式(Template Pattern)

定義:在一個方法中定義一個算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以在不改變算法結構的情況下,重新定義算法中的某些步驟。(工廠方法是模板方法的一個特殊版本) UML類圖: C++實現: #include<iostrea

原创 設計模式(三)————迭代器模式(Iterator Pattern)

定義:提供一種方法順序訪問一個聚合對象中的所有元素而不暴露該對象的內部表示。 UML類圖:   C++實現: #include<iostream> #include<string> #include<mutex> #include<s

原创 設計模式(十)————裝飾者模式(Decorator Pattern)

定義:動態地給一個對象添加一些額外的職責。就增加功能來說,裝飾者模式相比生成子類更加靈活。 UML類圖: C++實現: #include<iostream> #include<string> using namespace std;

原创 設計模式(一)————策略模式(Strategy Pattern)

定義:封裝一組算法,讓算法之間可以相互替換 類圖:   C++實現: #include<iostream> using namespace std; class IStrategy { public: virtual void