[問題] 繼承後 opretor+ 型別轉換問題

看板C_and_CPP作者 (Charlott.HonG)時間7年前 (2017/03/18 16:55), 7年前編輯推噓5(504)
留言9則, 1人參與, 最新討論串1/2 (看更多)
參考代碼:https://goo.gl/jxbkwE 我建了一個 template Arr 的類別目的要集合 +- 運算的代碼寫在同一處 父類別(operator寫在這裡) Arr<int> a{0, 1, 2}; 子類別 Arr_int b{0, 1, 2}; 當我使用 b=b+b; 的時候因為 b+b 返還的類別是 Arr 造成了 Arr_int = Arr; 的窘況,然後就找不到那個運算子了 這能怎麼處理~ 我有試著將他向下轉換不行呢QuQ 為什麼 b = dynamic_cast<Arr_int>(b+b); 有什麼比較好的作法嗎 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 218.166.134.30 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1489827345.A.FB2.html

03/18 17:18, , 1F
Arr<T1> operator+會造成slicing
03/18 17:18, 1F

03/18 17:19, , 2F
然後沒有虛函數不能用dynamic_cast向下轉型
03/18 17:19, 2F

03/18 17:22, , 3F
operator+必須設計成值返回,看你要不要在子類重寫一
03/18 17:22, 3F

03/18 17:22, , 4F
03/18 17:22, 4F

03/18 17:37, , 5F
啊,上面講的是寫一個子類版的operator+,不是寫在子
03/18 17:37, 5F

03/18 17:37, , 6F
類裡面
03/18 17:37, 6F
多寫一個 Arr_int operator+(Arr_int const &lhs, Arr_int const &rhs){ return Arr_int(lhs) += rhs; } 會出現錯誤呢~QuQ 這什麼意思 inhereit.hpp: In function 'Arr_int operator+(const Arr_int&, const Arr_int&)': inhereit.hpp:56:25: error: could not convert 'Arr_int((* & lhs)).Arr_int::<anonymous>.Arr<T>::operator+=<int>((& rhs)->Arr_int::<anonymous>)' from 'Arr<int>' to 'Arr_int' return Arr_int(lhs) += rhs; ~~~~~~~~~~~~~^~~~~~ ※ 編輯: hunandy14 (218.166.134.30), 03/18/2017 18:09:01

03/18 19:01, , 7F
operator+=返回型態是父類的參考
03/18 19:01, 7F

03/18 19:51, , 8F
有空參考exceptional c++ item 20
03/18 19:51, 8F

03/18 19:51, , 9F
這會是你要的
03/18 19:51, 9F
好的~ ※ 編輯: hunandy14 (218.166.134.30), 03/19/2017 12:41:36
文章代碼(AID): #1OpFOH-o (C_and_CPP)
文章代碼(AID): #1OpFOH-o (C_and_CPP)