1.模版類的實現方式有三種:
第一種在模版類內部實現成員函式;
第二種在模版類外部同乙個檔案中實現成員函式(friend類會產生問題:如下)
第三中在.h和.cpp分離的方式寫類模版(在解決友元函式問題的前提下,使用的時候需要包含.cpp檔案而不是.**件),否則會因為二次編譯而找不到cpp中的成員函式。
2.類模板的二次編譯需要在vs2017下清理解決方案之後再行編譯
#includeusing namespace std;
template class point
point operator+(point &p2) //成員函式實現運算子+過載
friend ostream &operator<<(ostream &out, point &p) //友元函式實現運算子《過載
friend pointmysub(pointp1, point&p2) //外部函式友元方式訪問內部資料
};int main()
#includeusing namespace std;
template class point
friend pointmysub(pointp1, point&p2)
};template point::point(t _x , t _y ) :x(_x), y(_y) {}
template pointpoint::operator+(point&p2)
int main()
#includeusing namespace std;
template class point ;
template point::point(t _x , t _y ) :x(_x), y(_y) {}
template pointpoint::operator+(point&p2)
template ostream &operator<<(ostream &out, point&p)
template pointmysub(pointp1, point&p2)
int main()
第一感覺是:
宣告:
friend ostream &operator<<(ostream &out,point&p);
friend point mysub(pointp1,point&p2);
與定義:
ostream &operator<<(ostream &out, **point** &p) {}
pointmysub(**point ** p1, **point** &p2) {}
不匹配引數型別不一致;
修改宣告過後,仍然不對;
1.<<>>左右移的函式過載需要如下宣告:
friend ostream &operator<<(ostream &out, point &p);
2.普通外部函式友元宣告如下:
friend pointmysub(pointp1, point&p2);
且需要前置宣告:
template class point;
template pointmysub(pointp1, point&p2);
模板類裡的friend方法
1.模板類裡的friend函式的說明和定義 2.所有一元運算子 建議成員 必須是成員 建議成員 建議成員 所有其他的二元運算子 建議非成員 非成員應該類內定義,見 include include using namespace std templateclass xiaok 第1種 friend v...
C 中的模板(類模板 模板類 模板函式)
1 class 一般class用於定義類,在模板引入c 後,最初定義模板的方法為 template,這裡class關鍵字表明t是乙個型別 2 typename 為了避免class在這兩個地方的使用可能給人帶來混淆,所以引入了typename這個關鍵字,它的作用同class一樣表明後面的符號為乙個型別...
friend 函式在類中的用法
友元函式是可以直接訪問類的私有成員的非成員函式。它是定義在類外的普通函式,它不屬於任何類,但需要在類的定義中加以宣告,宣告時只需在友元的名稱前加上關鍵字friend。定義格式 c friend 返回型別 函式名 引數列表 問題提出 我們已知道類具有封裝和資訊隱藏的特性。只有類的成員函式 才能訪問類的...