當前位置:首頁 » 編程軟體 » 范型編程

范型編程

發布時間: 2023-05-27 13:53:37

㈠ C++中,什麼是GP

分類: 電腦/網路 >> 程序設計 >> 其他編程語言
解析:

泛型編程也就是GP(Generic Programming),推崇與類型無關的編程思想。簡單來說基蠢,就是將針對不同數據類型的相同演算法從數據結構<類>中剝離出來,

這與傳統的C++的繼承和春鋒敬多態截然不同。

可以說泛型思想中沒有多少繼承和多態的成分。甚至有背道而馳的味道。

在C++實現上,泛型嚴重依賴於模板機制,事實上如果沒有模板的引入,泛型絕對不會在C++語言中獲得如此巨大的成功!

泛型代碼由C++編譯器在編譯期解釋成二進制代碼。也就是說,泛型的代碼編譯起來可能會使程序的二進制代碼變大,但這一點也保證了程序在運行的時候不會損失效率...

當然泛型不是萬能的,濫用泛型也許一樣會使你的代碼緩慢...

工具畢竟還是工具,思想和方法總有其局限性的。

如果扒慎沒接觸過,學習泛型編程,對你是一個全新的體驗 。

㈡ C++所指的泛型編程是什麼意思

就是具有通用性的,比如c++的atl和模板

㈢ c++模板與泛型的區別是什麼呢

1、泛型編程就是以獨立於任何特定類型的方式編寫代碼,而模板是泛型編程的基礎。
2、模板定義以關鍵字template開始,後接尖括弧括住的模板形參表。模板形參可以是表示類型的類型形參(type parameter),也可以是表示常量表達式的非類型形參(nontype parameter)。

㈣ 泛型在C++編程中有什麼實際意義怎麼用

泛型最大的意義就是代碼重用和類型安全了
比如stl的vector,可以存放int,string或者用戶自槐戚定義的任意類型的數據,代碼只寫一份就可以產生出無數類型的數組類型,而且是強類型的,沒有template就只能用void,void來處理通用的問題,但是void是非類型安全。
樓主可以熟悉一下stl庫,裡面的尺明笑函數、陵含類基本都是模板手法實現的

㈤ C++中,什麼是GP

泛型編程也就是GP(Generic Programming),推崇與類型無關的編程思想。簡單來說,就是將針對不同數據類型的相同演算法從數據結構<類>中剝離出來,
這與傳統的C++的繼承和多態截然不同。
可以說泛型思想中沒有多少繼承和多態的成分。甚至有背道而馳的味道。

在C++實現上,泛型嚴重依賴於模板機制,事實上如果沒有模板的引入,泛型絕對不會在C++語言中獲得如此巨大的成功!

泛型代碼由C++編譯器在編譯期解釋成二進制代碼。也就是說,泛型的代碼編譯起來可能會使程序的二進制代碼變大,但這一點也保證了程序在運行的時候不會損失效率...
當然泛型不是萬能的,濫用泛型也許一樣會使你的代碼緩慢...
工具畢竟還是工具,思想和方法總有其局限性的。
如果沒接觸過,學習泛型編程,對你是一個全新的體驗 。

㈥ 工作中 C++ 泛型編程用的多嗎

在實際工作中,只是偶爾才會用到

但是懂得泛型很重要,因為很多重要的庫都大量運用了泛型技術,對泛型有比較深入的了解,可滑歲以更好地使用這些庫。比如有的庫的類模板是有默認參數的,這實際上給了你自定義擴展的空間。

給你舉個簡單的例子,C++中的橋讓彎map,也就是字典,完整的模板參數列表是這樣的

template <class Key, class Value, class compare = less<Key>, class Allocator = allocator<pair<Key, Value>>()>

後面兩個給出了默認模板實參,其中第三個是比較器,map默認使用的是定義敏悶在functional文件,繼承自binray_function的less,其中調用了key自己的operator <。
第四個是內存配置器,如果你打算自己管理內存的話,可以自定義。
就說說第三個比較器吧,假如你需要一個鍵為std::string,但是比較的時候大小寫不敏感的字典怎麼辦呢。string類型自己有了比較操作符了,於是你就可以自定義一個函數對象作為第三個模板參數。

㈦ 什麼是泛型(C#概念)

在給你比較好懂的:
通過泛型可以定義類型安全類,而不會損害類型安全、性能或工作效率。您只須一次性地將伺服器實現為一般伺服器,同時可以用任何類型來聲明和使用它。為此,需要使用 < 和 > 括弧,以便將一般類型參數括起來。例如,可以按如下方式定義和使用一般堆棧:
public class Stack{ T[] m_Items; public void Push(T item) {...} public T Pop() {...}}Stack stack = new Stack();stack.Push(1);stack.Push(2);int number = stack.Pop();
代碼塊 2 顯示一般堆棧的完整實現。將代碼塊 1 與代碼塊 2 進行比較,您會看到,好像 代碼塊 1 中每個使用 Object 的地方在代碼塊 2 中都被替換成了 T,除了使用一般類型參數螞敬扒 T 定義 Stack 以外:
public class Stack{...}
在使用一般堆棧時,必須通知編譯器使用哪個類型來代替一般類型參數 T(無論是在聲明變數時,還是在實例化變數時):
Stack stack = new Stack();
編譯器和運行庫負責完成其餘工作。所有接受或返回 T 的方法(或屬性)都將改為使用指定的類型(在上述示例中為整型)。
代碼塊 2. 一般堆棧
public class Stack{ readonly int m_Size; int m_StackPointer = 0; T[] m_Items; public Stack():this(100) {} public Stack(int size) { m_Size = size; m_Items = new T[m_Size]; } public void Push(T item) { if(m_StackPointer >= m_Size) throw new StackOverflowException(); m_Items[m_StackPointer] = item; m_StackPointer++; } public T Pop() { m_StackPointer--; if(m_StackPointer >= 0) { return m_Items[m_StackPointer]; } else { m_StackPointer = 0; throw new InvalidOperationException("Cannot pop an empty stack"); } }}

注 T 是一般類型參數(或類型參數),而一般類型為 Stack。Stack 中的 int 為類型實參。
該編程模型的優點在於,內部演算法和數據操作保持不變,而實際數據類型可以基於客戶端使用伺服器代碼的方式進行更改。
泛型實現
表面上,C# 泛型的語法看起來與 C++ 模板類似,但是編譯器實現和支持它們的方式存在重要差異。正如您將在後文中看到的那樣,這對於泛型的使用方式具有重大意義。
注 在本文中,當提到 C++ 時,指的是傳統 C++,而不是帶有託管擴展的 Microsoft C++。
與 C++ 模板相比,C# 泛型可以提供增強的安全性,但是在功稿扒能方面也受到某種程度的限制。
在一些 C++ 編譯器中,在您通過特定類型使用模板類之前,編譯器甚至不會編譯模板代碼。當您確實指定了類型時,悶昌編譯器會以內聯方式插入代碼,並且將每個出現一般類型參數的地方替換為指定的類型。此外,每當您使用特定類型時,編譯器都會插入特定於該類型的代碼,而不管您是否已經在應用程序中的其他某個位置為模板類指定了該類型。C++ 鏈接器負責解決該問題,並且並不總是有效。這可能會導致代碼膨脹,從而增加載入時間和內存足跡。
在 .NET 2.0 中,泛型在 IL(中間語言)和 CLR 本身中具有本機支持。在編譯一般 C# 伺服器端代碼時,編譯器會將其編譯為 IL,就像其他任何類型一樣。但是,IL 只包含實際特定類型的參數或佔位符。此外,一般伺服器的元數據包含一般信息。
客戶端編譯器使用該一般元數據來支持類型安全。當客戶端提供特定類型而不是一般類型參數時,客戶端的編譯器將用指定的類型實參來替換伺服器元數據中的一般類型參數。這會向客戶端的編譯器提供類型特定的伺服器定義,就好像從未涉及到泛型一樣。這樣,客戶端編譯器就可以確保方法參數的正確性,實施類型安全檢查,甚至執行類型特定的 IntelliSense。
有趣的問題是,.NET 如何將伺服器的一般 IL 編譯為機器碼。原來,所產生的實際機器碼取決於指定的類型是值類型還是引用類型。如果客戶端指定值類型,則 JIT 編譯器將 IL 中的一般類型參數替換為特定的值類型,並且將其編譯為本機代碼。但是,JIT 編譯器會跟蹤它已經生成的類型特定的伺服器代碼。如果請求 JIT 編譯器用它已經編譯為機器碼的值類型編譯一般伺服器,則它只是返回對該伺服器代碼的引用。因為 JIT 編譯器在以後的所有場合中都將使用相同的值類型特定的伺服器代碼,所以不存在代碼膨脹問題。
如果客戶端指定引用類型,則 JIT 編譯器將伺服器 IL 中的一般參數替換為 Object,並將其編譯為本機代碼。在以後的任何針對引用類型而不是一般類型參數的請求中,都將使用該代碼。請注意,採用這種方式,JIT 編譯器只會重新使用實際代碼。實例仍然按照它們離開託管堆的大小分配空間,並且沒有強制類型轉換。
泛型的好處
.NET 中的泛型使您可以重用代碼以及在實現它時付出的努力。類型和內部數據可以在不導致代碼膨脹的情況下更改,而不管您使用的是值類型還是引用類型。您可以一次性地開發、測試和部署代碼,通過任何類型(包括將來的類型)來重用它,並且全部具有編譯器支持和類型安全。因為一般代碼不會強行對值類型進行裝箱和取消裝箱,或者對引用類型進行向下強制類型轉換,所以性能得到顯著提高。對於值類型,性能通常會提高 200%;對於引用類型,在訪問該類型時,可以預期性能最多提高 100%(當然,整個應用程序的性能可能會提高,也可能不會提高)。本文隨附的源代碼包含一個微型基準應用程序,它在緊密循環中執行堆棧。該應用程序使您可以在基於 Object 的堆棧和一般堆棧上試驗值類型和引用類型,以及更改循環迭代的次數以查看泛型對性能產生的影響。

㈧ C++中用到泛型編程後,出現這些錯誤是什麼意思

你用的什麼編譯器? 這個警告的意思是實現的這個類的名字太長了。 新的編譯器應該很少見這個問題

關於警告, 如果你想認真編程,應該開4級警告,並且確保解決所有warning(這個warning沒辦法,只能用#pragma告訴他別報了)。 寫程序留著warning只能應付老師而已,在工作里是不行的

㈨ 泛型編程中怎麼實現運算符重載

返回類型 operator 運算符 (左邊的參數, 右邊的參數 )
比如說重載string類型敗卜旅的弊野 +的話, 就是
string operator + (string, string) ; 實際上因為效率的關系, 參數類型一般寫成const string&.

第二 作為成員函數. 格式是
返回類型 operator 運算符 (右邊的參數 )
注意, 運算符左邊的參數沒有了, 以為察凳class 的this就是左參數.

class string
{
string operator +(string); // 重載了 string + string 的操作
string operator +(int); // 重載了 string + int 的操作.
};

此外就是, 重載操作符的參數必須至少有一個 "不是內置類型.".
因此, 規定了不允許重載內置類型間的操作, 比如說重載 int+ int 是不許可的.

熱點內容
偶校驗c語言 發布:2025-02-13 23:22:52 瀏覽:937
芒果如何提取離線緩存視頻 發布:2025-02-13 23:16:12 瀏覽:793
王者榮耀微信區安卓哪裡分低 發布:2025-02-13 23:14:10 瀏覽:658
安裝linuxvmwaretools 發布:2025-02-13 22:56:02 瀏覽:8
浪潮伺服器如何引導系統安裝光碟 發布:2025-02-13 22:56:02 瀏覽:112
java多線程的同步 發布:2025-02-13 22:46:15 瀏覽:920
軟體使用許可權里存儲關閉還是打開 發布:2025-02-13 22:46:11 瀏覽:382
大王卡視頻上傳成功正在審核 發布:2025-02-13 22:45:06 瀏覽:523
和平精英安卓版怎麼調成中文 發布:2025-02-13 22:16:10 瀏覽:37
混沌起源需要什麼配置玩 發布:2025-02-13 22:14:33 瀏覽:278