91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++中怎么應用類模板

發布時間:2021-11-24 11:18:55 來源:億速云 閱讀:168 作者:iii 欄目:大數據

這篇文章主要講解了“C++中怎么應用類模板”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“C++中怎么應用類模板”吧!

一、類模板的引出:

1、在c++中是否能夠將泛型的思想應用在類上呢?

我們在前面的兩篇文章里面,對函數模板有了一個清楚的認識,作為類比學習,當然泛型的思想是可以應用到類上的。

2、類模板:

  • 一些類主要用于存儲和組織數據元素

  • 類中數據組織的方式和數據元素的具體類型無關

  • 如:數組類,鏈表類,Stack類,Queue類等等

  • c++中將模板的思想應用于類,使得類的實現不關注數據元素的具體類型,而只關注類所需要實現的功能

3、C++中的模板:

以相同的方式處理不同的類型

在類聲明前使用template進行標識

template < typename T >//T表示泛指類型

class Operator
{
   public:
      T op(T a , T b);
};

4、類模板的應用

  • 只能顯示指定具體類型,無法自動推導(我們的函數模板是可以實現自動推導具體類型的)

 //使用具體類型"<Type>"定義對象
Operator<int> op1;
Operator<string> op2;

int i = op1.op(1,2);
string s = op2.op("txp","C++");
  
  • 聲明的泛指類型T可以出現在類模板的任意地方

  • 編譯器對類模板的處理方式和函數模板相同

-從類模板通過具體類型產生不同的類

-在聲明的地方對類模板代碼本身進行編譯

-在使用的地方對參數替換后代碼進行編譯

代碼實踐:

#include <iostream>
#include <string>

using namespace std;

template < typename T >
class Operator
{
public:
    T add(T a, T b)
    {
        return a + b;
    }
    T minus(T a, T b)
    {
        return a - b;
    }
    T multiply(T a, T b)
    {
        return a * b;
    }
    T divide(T a, T b)
    {
        return a / b;
    }
};

string operator-(string& l, string& r)// 全局函數方式重載 - 操作符,編譯通過;先類內部、再全局
{
    return "Minus";
}

int main()
{
    Operator<int> op1;
    
    cout << op1.add(1, 2) << endl;
    
    Operator<string> op2; // 第二次使用類模板時進行編譯,但是并不是對所有模板中的函數進行了第二次編譯,是分步編譯的,首先編譯的是構造函數,此時用的是默認的,沒有問題,這里編譯通過;
    
    cout << op2.add("Txp", "C++") << endl;
    cout << op2.minus("Txp", "C++") << endl; // 如果沒有定義全局的重載 - 操作符的函數時,字符串相減沒有定義,報錯;這里報錯展示出來是為了證明類模板編譯也是經過了兩次編譯;這里編譯器針對 minus() 函數進行第二次編譯;定義全局的重載 - 操作符函數后,打印 Minus ;
    
    return 0;
}


 

輸出結果:

root@txp-virtual-machine:/home/txp# ./a.out
3
TxpC++
Minux

 

5、類模板的工程應用

  • 類模板必須在頭文件中定義

  • 類模板不能分開實現在不同的文件中

  • 類模板外部定義的成員函數需要加上模板<>聲明

代碼實踐:

Operator.h頭文件:

#ifndef _OPERATOR_H_
#define _OPERATOR_H_

template < typename T >
class Operator
{
public:
    T add(T a, T b);
    T minus(T a, T b);
    T multiply(T a, T b);
    T divide(T a, T b);
};

template < typename T >
T Operator<T>::add(T a, T b)
{
    return a + b;
}


template < typename T >
T Operator<T>::minus(T a, T b)
{
    return a - b;
}


template < typename T >
T Operator<T>::multiply(T a, T b)
{
    return a * b;
}


template < typename T >
T Operator<T>::divide(T a, T b)
{
    return a / b;
}

#endif
 

test.cpp文件:

#include <iostream>
#include <string>
#include "Operator.h"

using namespace std;


int main()
{
    Operator<int> op1;
    
    cout << op1.add(1, 2) << endl;
    cout << op1.multiply(4, 5) << endl;
    cout << op1.minus(5, 6) << endl;
    cout << op1.divide(10, 5) << endl;
    
    return 0;
}


輸出結果:

root@txp-virtual-machine:/home/txp# ./a.out
3
20
-1
2

感謝各位的閱讀,以上就是“C++中怎么應用類模板”的內容了,經過本文的學習后,相信大家對C++中怎么應用類模板這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

泸溪县| 凉城县| 田阳县| 常山县| 赣州市| 白山市| 沽源县| 阳朔县| 克什克腾旗| 开封县| 贡嘎县| 库伦旗| 南丹县| 竹北市| 宿迁市| 韶山市| 蕉岭县| 英吉沙县| 柳河县| 射阳县| 江西省| 鄄城县| 资阳市| 蓬莱市| 大渡口区| 甘洛县| 九龙城区| 伊通| 清水县| 鄄城县| 玉树县| 瑞丽市| 普格县| 房产| 平舆县| 镶黄旗| 定陶县| 井陉县| 宁都县| 汉源县| 华池县|