今天看到乙個演算法題,就是如果有兩個大整數求和,但是這兩個大整數的取值範圍超過了計算機能表示的範圍,要怎麼辦?
正好之前看了線性表的順序儲存結構,覺得可以將大整數的每一位儲存到陣列中,然後對陣列進行對應位的計算!線性表的順序儲存結構的
實現可以看我的前面的部落格,有介紹。現在要寫乙個大整數求和的演算法,即用兩個線性表進行相加,所以要將這個演算法函式宣告為順序錶類的友元函式,
以此來讀取類的私有成員!具體實現如下:
template//寫完編譯,出錯!定義模板類
class
seqlist
; //
建構函式,將大整數的每一位存到陣列中,陣列低位放置整數的高位
templateinline seqlist
::seqlist(int a, int
n) length =n;}//
具體演算法 ,結果放入表a中
templateseqlist
add(seqlist&a, seqlist&b)
//計算大整數a餘下的部分
for (; i < n; i++)
//計算大整數b餘下的部分
for (; i < m; i++)
int d = (n > m) ?n : m;
if (flag == 1
)
returna;}
intmain()
感覺寫的很對,怎麼錯了呢??找錯吧。。。
函式add並不是乙個模板函式,而下面卻用模板函式定義
於是進行修改,修改如下:
template//如上修改之後,順利通過編譯!定義模板類
class
seqlist
;
執行結果如下:
結果正確。
類模板的模板友元函式定義
類模板的模板友元函式定義有2種方式 1.將友元模板函式直接定義在類模板中。這種方式比較簡單直接。2.將友元模板函式宣告在類模板中,定義在類模板之外。這種方式的寫法,如果不小心,通常會出現編譯沒問題,鏈結時無法解析的錯誤。以下是乙個簡單的正確的例子 1 include 2 include 3 4 te...
模板類中的友元函式
模板類中友元函式不要濫用,最好只用來過載左移和右移運算子 和 如果用於普通友元函式過載,會非常麻煩,即使類模板定義和宣告分開,也建議都寫在.h或.hpp檔案中,即要保證模板類的定義和宣告在乙個檔案中,否則,將不能找到函式的定義,這和模板的二次編譯有關。參見官方的stl庫風格可知,它也遵循這一原則,即...
模板類的 友元模板函式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 include include usingnamespacestd template classt c...