網(wǎng)站首頁 編程語言 正文
類模板
前面以函數(shù)模板為例,介紹了具體化與實例化。那么對于類模板,有什么不同呢?
類包括成員變量和成員函數(shù),他們都可以包含類模板的模板參數(shù)。而成員函數(shù)本身也可以是函數(shù)模板。看下面的兩個類:
// 類模板
template <typename T>
class A {
private:
T t;
public:
void funcA(T t);
};
template <typename T>
void A<T>::funcA(T t) {
cout << t;
}
// 成員函數(shù)模板
class B {
private:
int t;
public:
template <typename T>
void funcB(T t);
};
template <typename T>
void B::funcB(T t) {
cout << t;
}
int main()
{
A<int> a1;
a1.funcA(1);
A<char*> a2;
a2.funcA("2");
B b;
b.funcB(1);
b.funcB("2");
}
類模板A中包含成員函數(shù)funcA;類B包含一個成員函數(shù)模板funcB。我們仔細看下二者的區(qū)別。
類模板與成員函數(shù)模板的區(qū)別
首先,類模版A中的成員函數(shù)的類型可以用類模板參數(shù)T,而成員函數(shù)模板做不到。
其次,在調(diào)用成員函數(shù)時,類模板A需要先指定一種類型創(chuàng)建一個實例對象(如代碼中的a1),然后才能調(diào)用成員函數(shù),a1.funcA只能傳入int類型參數(shù)。如果想傳char*類型參數(shù),必須用char*創(chuàng)建一個實例(代碼中的a2)。
而對于類B,則創(chuàng)建一個實例對象(b)之后,可以任何類型作為參數(shù)來調(diào)用funcB。
只要明白了前面講的模板實例化,這里面的原因也很好理解。對于A來說,整個類是一個模版,當使用int類型生成對象a1時,也會對類模板A進行實例化,生成A類,其中所有的T都會替換為int,因此生成的類只有一個成員函數(shù) void funcA(int)。如果想傳入char*,則必須實例化A<char*>這個類。
而對于類B,它本身只是一個普通類,只不過它包含一個成員函數(shù)模板。當編譯器發(fā)現(xiàn)代碼中有調(diào)用這個成員函數(shù)funcB(int),編譯時會為funcB實例化;如果也有調(diào)用funcB(char*),則會為B生成funcB<char*>成員函數(shù)。也就是說,類B的成員函數(shù)的數(shù)量不是確定的,是根據(jù)funcB被調(diào)用的情況來決定到底實例化出多少個成員函數(shù)。
原文鏈接:https://juejin.cn/post/7114474576033579038
相關(guān)推薦
- 2022-09-08 Go語言中并發(fā)的工作原理_Golang
- 2024-03-16 docker 獲取鏡像幾種方式
- 2022-07-23 Go語言學(xué)習(xí)筆記之文件讀寫操作詳解_Golang
- 2022-07-28 聊聊docker跨主機之間容器通信問題_docker
- 2022-09-03 一起聊聊C++中的特殊成員函數(shù)_C 語言
- 2023-04-18 C生萬物C語言宏將整數(shù)二進制位的奇偶數(shù)位交換_C 語言
- 2023-02-27 c++數(shù)組排序的5種方法實例代碼_C 語言
- 2022-04-16 pycharm如何設(shè)置自動生成作者信息_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支