日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

【c++】29.设计模式总结

發(fā)布時間:2025/3/21 c/c++ 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【c++】29.设计模式总结 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

持續(xù)更新中…

1.有個通用的使用多態(tài)、虛函數(shù) 的方法:
  • 1.定義一個容器,其中的元素類型是基類,在容器中存入不同子類類型的指針。
  • 2.不同子類中定義自己的接口虛函數(shù)。
  • 3.當遍歷該容器時,會根據(jù)該容器中的不同類型自動調(diào)用不同子類的接口函數(shù)。

2.如果增加一個需求 或者 更改一個需求很頻繁時候

做法是

  • 1.先定義一個基類Base_A,在這個基類定義公共的一個接口虛函數(shù) Func();
  • 2.再定義子類 Derived_B、Derived_C 繼承于這個基類 Base_A,在子類 Derived_B、Derived_C 中去具體實現(xiàn)這個需求的虛函數(shù)接口Func()。
  • 3.在另一個類Class_C中定義一個容器(以vector容器為例)std::vector<Base_A*> Vct,通過在容器Vct中 增加或者修改要使用的具體子類類型 Derived_B 或 Derived_C 的對象.
    當遍歷該容器Vct時,會根據(jù)該容器中的不同類型自動調(diào)用不同子類的接口函數(shù)Func()。
3.區(qū)分組合和聚合的方法:生命周期是否一致。一致的是組合,不一致的是聚合。

中間的裝飾器是為了提取公共代碼???

4.單一職責(zé)原則:一個類只有一個變化的原因。
5.依賴倒置原則:應(yīng)該依賴抽象,而不應(yīng)該依賴實現(xiàn)細節(jié)。(李老師說了一句,這里的依賴指的是編譯時依賴???)
6.面向接口編程:最簡單的一個表現(xiàn)形式就是,變量要聲明成 抽象基類。

只要是new出來的,都是實現(xiàn)細節(jié),是細節(jié)依賴,緊耦合(依賴具體類)。Base *A=new Derived();這種做法違背依賴倒置原則。因為Base *A是抽象基類接口,而new Derived()帶來的是細節(jié)依賴,緊耦合(依賴具體類)?!S模式講解

7.虛函數(shù)就是延時到運行時!

虛函數(shù)就是把函數(shù)的調(diào)用延時到運行時確定!

8.C++的多態(tài)性分為兩種:編譯時的多態(tài)、運行時的多態(tài); 使用重載來實現(xiàn)編譯時的多態(tài),使用虛函數(shù)來實現(xiàn)運行時的多態(tài)。

如果要用多態(tài),就必須使用指針。

9.為什么多態(tài)必須使用指針?

答:參考博客 https://www.cnblogs.com/yinheyi/p/10525543.html

10.工廠模式里面講到:設(shè)計模式不是把變化消滅掉了,而是把變化限定到了一個局部位置。

工廠模式里面就是,類 MainForm 的整體看上去沒有依賴任何具體類,他里面實用的都是抽象類。 抽象類A* a = 抽象類B對象指針->createA(); 其中 createA() 返回一個 抽象類A 的對象指針。我們通過在MainForm的構(gòu)造函數(shù)(或者它的接口函數(shù))傳入一個B的具體子類指針,然后把該指針賦值給 抽象類B對象指針。這樣這個B的具體子類并不在類 MainForm中定義創(chuàng)造,而是通過參數(shù)傳進來,就保證了類MainForm中全部都是抽象的、穩(wěn)定的。

李老師的代碼為了突出重點,new之后,都沒有規(guī)范寫delete,但是我們實際開發(fā)一定要記得寫delete。不想寫就使用智能指針shared_ptr聲明類別變量,然后使用make_shared進行初始化。

11.多態(tài)只對于虛函數(shù)來說。

對于類中的非虛函數(shù),不能通過 把子類對象賦值給基類對象,或者 把子類指針賦值給基類指針的方式,即,假設(shè)子類Derived有一個func()普通成員函數(shù),基類Base沒有,不能通過Derived derived; Base base=derived; base.func()或者 Base *base= new Derived();,base->func();的方式來調(diào)用到子類的func非虛函數(shù)(普通成員函數(shù))。

總結(jié)

以上是生活随笔為你收集整理的【c++】29.设计模式总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。