1. 程式人生 > >C++ 函式模板(十四)--template 泛型函式模板、通用函式、過載模板

C++ 函式模板(十四)--template 泛型函式模板、通用函式、過載模板

#include <iostream>
#include <string>
using namespace std;

//函式模板,typename 等價於 class
template <typename AnyType>
void test(AnyType &a, AnyType &b) {
    
    auto c = a;
    a = b;
    b = c;
}


//過載模板
template <typename AnyType>
void test(AnyType &a,AnyType &b,AnyType &c) {
    c = a+b;
}

template <typename T>
void test(T *a,T *b,T *c) {  //傳指標地址的實參方式,在解構函式時,c值的改變也對應改變外部引數
    *c = *a+*b;
}

template <typename T>  //c 是新建立的int變數,和外部引數值互不影響 , ab是兩種引用的表現方式
void test(T *a,T &b, int c) {
    
    auto to = *a;
    *a = b;
    b = to;
    c++;
}


template <typename AnyType2>
void test2(AnyType2 &a, AnyType2 &b) {
    
    auto c = b;
    b = a;
    a = c;
    
}


template <class T>
void test3(T &a, T &b) {
    auto c = a;
    a = b;
    b = c;
}



struct stdo {
    float fu;
    char cr[30];
};

//具體化顯式模板
template <typename T>
void testss(stdo &a ,stdo &b){
    
    auto fu = a.fu;
    a.fu = b.fu;
    b.fu = fu;
}


template <int>
void ttsdf(int i,int b){
    
    cout << "f" << endl;
    
}


int main(int argc, const char * argv[]) {

    //概念:C++編譯器實現了新增一項特性--函式模板,通用的函式描述;使用泛型定義函式
    
    int i = 10;
    int ii = 200;
    int iii = 100;

    string a = "aaa";
    string b = "bbbb";
    size_t tt = a.length();
    
    //利用泛型的函式模板交換兩個整型值
    test(i,ii);
    cout << "交換兩個整型值\n" << "i=" << i << endl << "ii=" << ii << endl;
    
    test(&i, &ii, &iii);
    cout << "過載\n" << "iii=" << iii << endl << "=" << ii << endl;
    
    test(&i, ii, iii);
    cout << "過載\n" << "iii=" << iii << endl << "i=" << i << endl << "ii=" << ii << endl;

    
    
    //利用泛型的函式模板交換兩個字串值
    test2(a,b);
    cout << "交換兩個字串值\n" << "a=" << a << endl << "b=" << b << endl;
    
    
    
    //顯式模板,交換兩個結構體中的元素
    cout.precision(2);  //保留小數點後兩位
    cout.setf(ios::fixed, ios::floatfield);
    
    stdo sto = {999.234,"dsfsdf"};
    stdo sto2 = {110.45222,"aaaaaa"};

    testss<stdo>(sto,sto2);
    cout << "顯式模板\n" << "sto.fu=" << sto.fu << endl << "sto2.fu=" << sto2.fu << endl;


    ttsdf<2>(10, 10);
    
    return 0;
}


相關推薦

C++ 函式模板()--template 函式模板通用函式過載模板

#include <iostream> #include <string> using namespace std; //函式模板,typename 等價於 class template <typename AnyType> void

Spring 學習()——依賴注入

•Spring 4.x 中可以為子類注入子類對應的泛型型別的成員變數的引用 整合多個配置檔案 •Spring 允許通過 <import> 將多個配置檔案引入到一個檔案中,進行配置檔案的整合。這樣在啟動 Spring 容器時,僅需要指定這個合併好的配置檔案就可以。 •im

C++程式設計 快速排序的函式模板實現

說在前面的廢話 話說快一年沒寫過部落格了。。。 在建站之前就先用csdn寫吧 這次要說的東西也沒有啥,主要是想寫一次快排(學了這麼就快排都沒寫過你敢信 用法類似於stl裡面的sort,有兩個版本。 不知道為什麼寫了很長時間。。。這麼短的程式碼 還是感

CLR via C#學習筆記-第二章-

vat message 靜態 定義 泛型接口 void 失敗 internal 運行時 泛型是CLR和編程語言提供的一種特殊機制,他支持另一種形式的代碼重用,即算法重用。 CLR允許創建泛型引用類型和泛型值類型,但不允許創建泛型枚舉類型。 此外CLR還允許創建泛型接口和泛型

CLR via C#學習筆記-第二章-基礎結構

12.2 泛型基礎結構 12.2.1 開放型別和封閉型別 具有泛型型別引數的型別仍然是型別,CLR同樣會為他建立內部的型別物件。 然而具有泛型型別引數的型別稱為開放型別,CLR禁制構造開放型別的任何例項。類似於CLR禁止構造介面型別的例項。 程式碼引用泛型類時可指定一組泛型型別實參。為所有型

CLR via C#學習筆記-第二章-接口委托

pre 類型安全 sealed 2.4 span 接口 triangle 泛型類 保持 12.3 泛型接口 泛型接口的意義 顯然,泛型的主要作用就是定義泛型的引用類型和值類型。 然而對泛型接口的支持對CLR來說也很重要。沒有泛型接口,每次用非泛型接口如IComparable

CLR via C#學習筆記-第二章-方法和其他成員

12.6 泛型方法 方法和類可以各自定義型別引數 定義泛型類、結構或介面時,型別中定義的任何方法都可以引用型別指定的型別引數。 型別引數可以作為方法引數、返回值或方法內部定義的區域性變數的型別使用。 CLR還允許方法指定他自己的型別引數,這些引數也可以作為引數、返回值或區域性變數的型別使用。 在下例

C#圖解教程 第七章

泛型 什麼是泛型 到現在為止,所有在類宣告中用到的型別都是特定的型別–或是程式設計師定義的,或是語言或BCL定義的。然而,很多時候,我們需要把類的行為提取或重構出來,使之不僅能用到它們編碼的資料型別上,還能應用到其他型別上。 泛型可以做到這一點。我們重構程式碼並額外增加一個抽象層,對於這樣的

C#之 List 集合

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _07List泛型集合

C++ Pirmer : 第章 : 過載運算子與型別轉換之函式呼叫運算子與標準庫的定義的函式物件

函式呼叫運算子 struct test { int operator()(int val) const { return (i > 0 ? i : -i); } }; 所謂的函式呼叫就是一個類過載了函式呼叫符,類在使用過載函式呼叫符時接受相應引數。這一過程就像是使用

C#高階程式設計三一天----總結

C#泛型總結 C#中的所謂的泛型程式設計和C++中相應的模版類似. 泛型方法 C#中的泛型方法是指使用了型別引數的方法成員,案例:    static void Main(string[] args)         {             int a=1;      

C#語法小知識(一)

泛型(Generic) 允許您延遲編寫類或方法中的程式設計元素的資料型別的規範,直到實際在程式中使用它的時候。換句話說,泛型允許您編寫一個可以與任何資料型別一起工作的類或方法。 您可以通過資料型別的替代引數編寫類或方法的規範。當編譯器遇到類的建構函式或方法的函式呼叫時,它

Java基礎語法<二> 程序設計

清除 extend 原生態 cast color 強制 方式 限定 只為 1 意義 泛型程序設計意味著編寫的代碼可以被很多不同類型的對象所重用。 常見應用 : ArrayList 2 K T V E ? object等的含義 類型變量使用大寫形式 E &ndash

SpringMVC()類轉換器

har public property springmvc gpo source 表達 resolv obj 為什麽頁面上輸入‘12’,可以復制給Handler方法對應的參數? 和是因為類型轉換器並不是可以將用戶提交的String,轉換為用戶需要的所有類型,此時,就需要自定

C#復習總結】細說委托

聲明 sys red 合成 delegate -s 返回 line ron 1 前言 本系列會將【委托】 【匿名方法】【Lambda表達式】 【泛型委托】 【表達式樹】 【事件】等基礎知識總結一下。(本人小白一枚,有錯誤的地方希望大佬指正) 系類1:細說委托 系類2:

[隨筆][Java][讀書筆記][thinking in java][第章 類信息]

found 構造 att main 數組 test 第一個 eating urn 主要理解如何在運行時獲取類型信息。主要有兩種方式:一是RTTI,假定我們在編譯時已經知道了所有的類型;二是反射機制,允許在運行時發現和使用類的信息。 14.1 為什麽需要RTTI 一個多

CLR via C#學習筆記-第章-類基礎-命名空間和程序集

程序集 microsoft 集中 歧義 str 可能 ring 需要 idg 4.3 命名空間和程序集 使用using指令簡化命名空間 C#編譯器通過using指令提供這個機制,例如 using System.IO; using System.Text; 只需要在代碼中

CLR via C#學習筆記-第章-類基礎-所有類都從System.Object派生

回收 spa 操作 哈希 包括 生成 自動生成 返回 equals 4.1 所有類型都從System.Object派生 System.Object類型 運行時要求每個類型最終都從System.Object類型派生 也就是說,以下兩個類型定義完全一樣 //隱式派生自Syst

CLR via C#學習筆記-第章-類基礎-運行時的相互關系

分配內存 ring type類 實現 語句 初始化 sem strong 允許 4.4 運行時的相互關系 已加載CLR的一個Windows進程,該進程可能有多個線程。線程創建時會分到1MB的棧。棧空間用於向方法傳遞實參,方法內部定義的局部變量也在棧上。 以下是方法M1和M2

C++筆記 第課 進階面向物件(下)---狄泰學院

如果在閱讀過程中發現有錯誤,望評論指正,希望大家一起學習,一起進步。 學習C++編譯環境:Linux 第十四課 進階面向物件(下) 1.面向物件基本概念 類之間的基本關係 繼承 從已存在類細分出來的類和原類之間具有繼承關係(is-a) 繼承的類(子類)擁有原類(父類)的所有屬