日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

模板杂记(一)

發布時間:2024/8/24 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 模板杂记(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

模板類中的友元的類外實現時,使用類的內部類聲明變量時的格式:

1 template <typename T> 2 class A 3 { 4 public: 5 private: 6 class B//聲明一個內部類 7 { 8 public: 9 B(void):c(10){} 10 T c; 11 friend ostream& operator<< (ostream& os,const B& b)//內部重載<<,以利于外部使用 12 { 13 return os<<b.c; 14 } 15 }; 16 template <typename T1>//內部的模板聲明,不能用T,會和類外的T重復,報錯 17 friend ostream& operator<< (ostream& os,const A<T1>& a);//友元函數聲明中的A<T1>& 中的T1不能換做T,這好像就是一個友元函數的模板,與class A模板類無關 18 }; 19 template <typename T>//外部實現時必須為模板 20 ostream& operator<< (ostream& os,const A<T>& a) 21 { 22 typename A<T>::B b;//訪問內部類時必須使用typename,告訴編譯器A<T>是一個模板類 23 return os<<b; 24 // typename T::B b; 25 }

?

?

下面的代碼中Y可以是一個模板類:

1 template<typename X, typename Z, 2 template<typename T> class Y> 3 class B { 4 public: 5 B (const X& i, const Z& s) : 6 m_i (i), m_s (s) {} 7 Y<X> m_i;//一個模板類聲明的對象作為另一個模板類的成員變量 8 Y<Z> m_s; 9 }; 10 11

?

模板類的繼承示意:

1 class A { 2 public: 3 A (const T& t) : m_t (t) {} 4 T m_t; 5 }; 6 template<typename T, typename Y> 7 class B : public A<T> {//注意繼承時基類的格式 8 public: 9 B (const T& t, const Y& y) : 10 A<T> (t), m_y (y) {}//與普通的繼承相同,構造時應該初始化基類 11 Y m_y; 12 };

?

?

下面代碼中的子類模板,可以滯后于父類的構造:

?

1 template<typename BASE> 2 class Shape : public BASE {//繼承于一個不確定的基類 3 public:            //只有在子類實例化后才能確定基類,才會有這樣的特例 4 void draw (void) const { 5 BASE::draw (); 6 } 7 }; 8 class Rect { 9 public: 10 void draw (void) const { 11 cout << "繪制矩形..." << endl; 12 } 13 }; 14 class Circle { 15 public: 16 void draw (void) const { 17 cout << "繪制圓形..." << endl; 18 } 19 };

?

所有代碼的測試環境為ubuntu12.04下的g++編譯器

轉載于:https://www.cnblogs.com/huohongbin/p/3700263.html

總結

以上是生活随笔為你收集整理的模板杂记(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。