C++類模板應(yīng)用代碼深入剖析
C++中有類繼承的概念,意思就是能夠?qū)崿F(xiàn)與繼承相同功能的一種應(yīng)用。那么什么又是C++類模板呢?它是否也和類函數(shù)的用法相似呢?首先讓我們通過以下這段代碼來為大家詳細(xì)介紹一下C++類模板的應(yīng)用方式。
C++類模板代碼示例:
- #include "stdafx.h"
- #include "Stack.h"
- #include < iostream>
- #include < string>
- #include < cstdlib>
- #include < stdexcept>
- int _tmain(int argc, _TCHAR* argv[])
- {
- try
- {
- Stack< int> intStack;
- Stack< std::string> stringStack;
- intStack.push(7);
- std::cout< < "intStack.top() = >"< < intStack.top()
< < std::endl;- stringStack.push("Hello!");
- std::cout< < "stringStack.top() = >"< < stringStack.top()
< < std::endl;- stringStack.pop();
- stringStack.pop();
- }
- catch(std::exception const& ex)
- {
- std::cerr< < "Exception: "< < ex.what()< < std::endl;
- return EXIT_FAILURE;
- }
- return 0;
- }
#t#在這段C++類模板的代碼中,語句[Stack< int> intStack;]展示了類模板的實(shí)例化,并定義一個(gè)變量的過程。和函數(shù)模板的實(shí)例化一樣,類模板的實(shí)例化也必須提供所需參數(shù)的類型。實(shí)例化后定義的變量可以和普通變量一樣的調(diào)用類模板定義的成員函數(shù)。只是需要注意,對(duì)于類模板的成員函數(shù),只有在被調(diào)用的時(shí)候才會(huì)被實(shí)例化。對(duì)于上面的intStack,由于只調(diào)用了push()成員函數(shù),所以它只實(shí)例化了push成員函數(shù)(構(gòu)造和析夠函數(shù)除外,他們會(huì)被默認(rèn)的調(diào)用)。
這樣作有兩個(gè)好處:
一是可以節(jié)約空間和時(shí)間。
二是,對(duì)于每一個(gè)類模板的參數(shù)類型,都要求提供模板所需要的操作。比如,如果你用自定義的類MyClass作為一個(gè)類模板Caculator< T>的參數(shù)。由于Caculator類模板要求提供的參數(shù)類型支持“+”和"-"操作。但是,你的MyClass類只需要用到“+”操作,沒有提供"-"操作。得益于上面的規(guī)則,你的MyClass類型還是可以作為Caulator< T>的參數(shù)。前提是你沒有用到"-"相關(guān)的成員函數(shù)。
以上就是我們對(duì)C++類模板的相關(guān)應(yīng)用介紹。