Essential C++濃縮筆記(六)——以template進行編程

1、template class的聲明和實例化

template<typename valType>
class BTnode:                //聲明

BTnode<int> bti;             //實例化

2、template類型參數的處理 

將所有template類型參數視作"class"類型來處理,參數傳遞用傳地址的方法而不是傳值方法,因爲有可能將類作爲參數傳入函數。

template <typename valType>
inline
BTnode<valType>::
BTnode(const valType &val)
	: _val(val)	// valType有可能是class類型,在member initializaition中初始化效率更高
{
	_cnt = 1;
	_lchild = _rchild = 0;
}

 

遇到的問題和總結:

1、類什麼時候需要前置聲明而什麼時候需要頭文件定義

簡單總結一下:

在什麼情況下我們才需要類型的定義,在什麼情況下我們只需要聲明就足夠了?

問題的回答是當我們需要知道這個類型的大小或者需要知道它的函數簽名的時候,我們就需要獲得它的定義。【第三篇文章】

前置聲明在友元類方法中的應用

如果在一個類A的聲明中將另一個類B的成員函數聲明爲友元函數F,那麼類A必須事先知道類B的定義;類B的成員函數F聲明如果使用類A作爲形參,那麼也必須知道類A的定義,那麼兩個類就互相依賴了,這裏必須使用類的前置聲明。【第一篇文章】

記錄這三篇文章,都看一遍基本就差不多理解了:

https://blog.csdn.net/yunyun1886358/article/details/5672574

https://jingyan.baidu.com/article/ad310e80329c031849f49ea2.html

https://blog.csdn.net/rogeryi/article/details/1439597

 

2、 VC++常見錯誤原因解析之error LNK2019: 無法解析的外部符號 "public: void __thiscall“

 

https://blog.csdn.net/liubing8609/article/details/85289447

首先檢查函數的定義和聲明是否一樣,是否丟了const(這個問題很容易忽視)!!!!!!!

加上一條可能的原因:

如果在頭文件中聲明瞭inline函數,cpp文件中要把inline去掉

 

3、->符號

num_sequence ns;            //num_seqence是一個類
num_sequence *pns = &ns;

pns->fibonacci(pos)        //指針調用成員的方式用->
ns.fibonacci(pos)         //一般調用方式

4、const總結

https://blog.csdn.net/Eric_Jo/article/details/4138548 

 

5、 模板類不能把聲明和實現分開!!!

通常會把類的聲明放在h文件,函數定義放在cpp文件中,但是對於模板類對象(template)不可以這麼做,否則會出現大量此類錯誤:(無法解析的外部符號:void _thiscall  ... 該符號在函數_mian中被調用)

 

6、非靜態成員函數調用錯誤

靜態成員函數是類的函數,無需指明是某個實例對象在操作。所以如果非靜態成員直接通過“: :”來調用類成員函數會報錯

https://blog.csdn.net/renwotao2009/article/details/41252365 

 

7、complex複數類用法詳解

http://c.biancheng.net/view/703.html

發佈了31 篇原創文章 · 獲贊 143 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章