C 中模板類涉及的friend函式的問題

2021-09-13 17:46:42 字數 1735 閱讀 2329

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 返回型別 函式名 引數列表 問題提出 我們已知道類具有封裝和資訊隱藏的特性。只有類的成員函式 才能訪問類的...