1. 程式人生 > >c++通用模板類(template class)定義實現詳細介紹

c++通用模板類(template class)定義實現詳細介紹

有時,有兩個或多個類,其功能是相同的,僅僅是資料型別不同,如下面語句聲明瞭一個類:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 class Compare_int { public : Compare(int a,int b) { x=a; y=b; } int max( ) { return (x>y)?x:y; } int min( )
{ return (x<y)?x:y;} private : int x,y; };

其作用是對兩個整數作比較,可以通過呼叫成員函式max和min得到兩個整數中的大者和小者。如果想對兩個浮點數(float型)作比較,需要另外宣告一個類:

1 2 3 4 5 6 7 8 9 10 11 12 class Compare_float { public : Compare(float a,float b) {x=a;y=b;}
float max( ) {return (x>y)?x:y;} float min( ) {return (x<y)?x:y;} private : float x,y; }

顯然這基本上是重複性的工作,應該有辦法減少重複的工作。

   C++在發展的後期增加了模板(template)的功能,提供瞭解決這類問題的途徑。可以宣告一個通用的類模板,它可以有一個或多個虛擬的型別引數,如對以上兩個類可以綜合寫出以下的類模板:

相關推薦

c++通用模板(template class)定義實現詳細介紹

有時,有兩個或多個類,其功能是相同的,僅僅是資料型別不同,如下面語句聲明瞭一個類: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

C++之模板(Template) 容器之map 及 物件副本 深/淺拷貝 等問題

例如:假若你沒有提供CFileAttribute::operator=(過載賦值操作符),那麼語句fileAttribute1 = fileAttribute2就相當於:memcpy(&fileAttribute1, &fileAttribute2, sizeof(CFileAttribut

C++ 中模板模板成員函數在定義

成員函數 成員 typename 開源 splay 開源代碼 pen color play 因為很多書都沒講到這種情況, 曾經有這個問題但一直沒答案,所以我一直以為模板類的模板成員函數只能在類內定義,直到我在某個開源代碼裏看到原來要加兩個 template<>

AOP C++通用模板實現

has_member.h: #ifndef __AOP_SRC_HAS_MEMBER_H__ #define __AOP_SRC_HAS_MEMBER_H__ #include <type_traits> #define HAS_MEMBER_FUNCTION(member) \

C++中用模板(結點,連結串列實現的單鏈表的合併操作!

程式碼通俗易通,如下 List.h #include<stdio.h> template <class T> class ListNode { T data; ListNode<T>* link; public:

[C++]模板的宣告與實現分離問題

本文,記錄C++模板類的實現。 實驗環境: linuxg++c++98 模板類的宣告與實現分離錯誤 目的:實現一個bag類 做法:模板類bag的宣告與實現分離,也就是.cpp和.h檔案分離 此

C++的模板定義一個萬能陣列,陣列元素型別任意,陣列大小也任意

/*用模版類實現一個萬能陣列,陣列型別可以任意給定,陣列大小可以任意給定*/ /* 函式呼叫 typeid(變數).name() 獲取變數的型別名 */ #include <iostream> using namespace std; //模版類定

C++中模板宣告和實現能否分離?

1.宣告部分 //point.h #ifndef _POINT_ #define _POINT_ template<class Elem> class Point { public: Point(Elem); } ; #endif 2.實現部分

C++初學】和物件定義與建構函式

一.類和物件定義 class 型別名 { public: 公有成員(外部介面) private: 私有成員(只允許類內函式訪問,有後續操作) protected: 保護成員 二.建構函式 def:給物件進行初始化的函式。 gra: 函式名與類名相同; 無返回值(return); 1.委託

C++之——列舉 enum class var_name{string1,string2,string3}

#include <iostream> using namespace std; int main() { enum class Case { case1, case2, case3 };

C++中String的字串分割實現

最近筆試,經常遇到需要對字串進行快速分割的情景,主要是在處理輸入的時候,而以前練習演算法題或筆試,很多時候不用花啥時間考慮測試用例輸入的問題。可是C++標準庫裡面沒有像java的String類中提供的字元分割函式split ,著實不方便。那麼怎麼解決這個問題呢?

C++】日期Date的定義

一、類的描述  類描述了具有共同特徵的一組物件,這組物件的屬性和行為相同,只不過具體物件的屬性值等有所區別。C++中類的定義一般分為類的說明部分和類的實現部分。其中類說明的格式如下: class<ClassName> { private: 私有資料和函

c++ array模板使用

目錄 本章是對c++ array模板類的知識歸納,講述了c++中array模板類的使用,不涉及原理方面的內容。 c++中的陣列型別是繼承了c語言的特性,在使用陣列的時候要注意陣列越界操作問題。為了更安全的對陣列進行操作,c+

c++中模板的使用

最近在資料結構的課程中很多周圍的同學對模板類的使用抱有很大的困惑,看也能看懂,但寫起來總是不明白…… 那就首先得知道為什麼要用模板。 假設我有一個方法 void swap(int& a,int& b) { int c = a;

c++標準異常和自定義異常物件

前言 標準異常類體系如下: 縮排層次表示繼承關係 exception #include <exception> runtime_error #include <stdexcept> overflow_er

C++中模板的友元過載

一個由《程式設計師面試寶典》引出的問題。 描述模板類的友元過載,用C++程式碼實現? 這實際上考察的是下面幾個問題: 1.模板類的編寫 2.模板類中友元函式的編寫 3.什麼時候會用到友元過載?答案是各種C++中的運算子。最典型的就是輸出操作符<<了。 書上給出的

C++中模板map常用示例

#include <iostream> #include <map> using namespace std; int main() { /****************************************************

基於C#彈幕射擊遊戲的實現——(二)渲染

這個遊戲打算是用C#+GDI做~所以渲染效率上還是要進行一些考慮的 這裡對傳統的GDI+封裝了下,通過批處理來提高一些效率 首先給出的是渲染介面的定義,方面以後更換高效能的渲染器(當然很遙遠) /// <summary> /// 渲染器介面 /

linux下C++引用模板成員,編譯出錯

C++引用模板類成員,編譯出錯,錯誤類似於-》missing 'typename' prior to dependent type name 'SeqList<Type>::referen

C++】模板連結串列

上一篇部落格介紹了模板類順序表,此篇部落格主要是模板類連結串列的實現。 #pragma once #include<iostream> #include<string> using namespace std; template<typena