C_and_CPP 板


LINE

// 程式碼備份: http://nopaste.info/6b4a9226e5.html // 程式碼備份: http://src.wtgstudio.com/?vw8A8a #include <iostream> using namespace std; template <typename T> class LineInterface { private: public: typedef LineInterface<T> this_type; explicit inline LineInterface(void) {} inline LineInterface(const this_type& d) {} virtual inline ~LineInterface(void) {} inline this_type& operator=(const this_type& d) { if (this != &d) {} return *this; } inline virtual const T& GetX1() const = 0; inline virtual const T& GetX2() const = 0; }; template <typename T> class StartEndLine : public LineInterface<T> { private: T m_x1, m_x2; public: typedef StartEndLine<T> this_type; explicit inline StartEndLine(const T& x1 = T(), const T& x2 = T()): m_x1(x1), m_x2(x2) {} inline StartEndLine(const this_type& d): m_x1(d.m_x1), m_x2(d.m_x2) {} virtual inline ~StartEndLine(void) {} inline this_type& operator=(const this_type& d) { if (this != &d) { m_x1 = d.m_x1; m_x2 = d.m_x2; } return *this; } inline const T& GetX1() const { return m_x1; } inline const T& GetX2() const { return m_x2; } }; template <typename T> class StartSameWidthLine : public LineInterface<T> { private: static T m_width; T m_x1; public: typedef StartSameWidthLine<T> this_type; explicit inline StartSameWidthLine(const T& x1 = T()): m_x1(x1) {} inline StartSameWidthLine(const this_type& d): m_x1(d.m_x1) {} virtual inline ~StartSameWidthLine(void) {} inline this_type& operator=(const this_type& d) { if (this != &d) { m_x1 = d.m_x1; } return *this; } inline static void SetWidth(const T& w = T()) { m_width = w; } inline const T& GetX1() const { return m_x1; } inline const T& GetX2() const { return m_x1 + m_width; } }; template<typename T> T StartSameWidthLine<T>::m_width = T(); template <typename T> inline ostream& operator<<(ostream& os, const LineInterface<T>& d) { return os << "(" << d.GetX1() << "," << d.GetX2() << ")"; } int main(int argc, char* argv[]) { cout << StartEndLine<int>(10, 20) << endl; StartSameWidthLine<int>::SetWidth(5); cout << StartSameWidthLine<int>(10) << endl; system("PAUSE"); return 0; } // 程式碼備份: http://nopaste.info/6b4a9226e5.html // 程式碼備份: http://src.wtgstudio.com/?vw8A8a 錯誤訊息: .\CPP_AND_C.cpp(xxx) : warning C4172: 傳回區域變數或暫存的位址 .\CPP_AND_C.cpp(xxx) : 編譯類別 樣板 成員函式 'const int &StartSameWidthLine<T>::GetX2(void) const' 如果我將 const int &StartSameWidthLine<T>::GetX2(void) const 改成 const int StartSameWidthLine<T>::GetX2(void) const 那麼就違反 沒有完成所有從 LineInterface<T> 繼承而來的Pure virtual function 如果我將 const int &LineInterface<T>::GetX2(void) const 改成 const int LineInterface<T>::GetX2(void) const 那麼就對 StartEndLine<T> 來說這是不必要的複製 請問我該怎麼做呢? --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.195.88.23
1F:推 legnaleurc:就把 const reference 拿掉唄,讓編譯器去煩惱最佳化 04/30 14:03
2F:→ legnaleurc:Super class 也不應該假設回傳值一定有個 reference 吧 04/30 14:04
3F:→ chrisdar:恩 這樣說好像也很有道理耶 XD 04/30 14:23
4F:→ chrisdar:根據各方的意見 決定採用(#19-JrOLY)方法二 04/30 18:20







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Soft_Job站內搜尋

TOP