夜行録 - 酔歩.net

日暮れて道遠し さらに夜道を行く もって夜行録と名付く

基底クラスの演算子関数

なんだかよく判らない問題を、二日もかけて煮詰めていったらこうなった。

基底クラスで演算子定義した時、派生クラスで基底クラスを読む代入演算子定義しないと駄目なのか

なんか裏はかけないのか?

こんなコードが

  1. span class="co2">#38;b) {
  2.  

こんなエラーに

minilin{yagi(pts/2)}32945: g++ -Wall BBB.cc                                 zsh
BBB.cc: In function 'int main()':
BBB.cc:18: error: no match for 'operator=' in '_c3 = test_B::operator+(((const test_B&)((const test_B*)(& _c2.test_C::))))'
BBB.cc:10: note: candidates are: test_C& test_C::operator=(const test_C&)

基底クラスを引数に取る copy constructor 書いて回避。それが答えでいいのだろうか・・・。

  1. span class="co2">#38;b) : test_B::test_B(b) {};
  2. };

つまりこんなのだな。仮想ならぬ偽装コンストラクタ

同じクラスいじっていて、似たような問題にまたぶちあたった。こっちは、しばらく前にも別件でぶつかった、Effective C++の p. 168 (33項 継承した名前を隠蔽しないようにしよう)の問題。もーね…、なんだろこのソース。

2010年02月10日 (Wed) - 17:18:00 - その他雑記 - 3151x - permalink
Karma points: 1. Do you like this article? [yes/no]