• ベストアンサー

C++で継承元のクラスの代入演算子を呼び出す方法

C++であるクラス継承したクラスの代入演算子で 継承元のクラスの代入演算子を呼び出す方法がわかりません。 こんな感じのソースです。 class T { T& operator=(const T &t) { } } class U :: T{ U& operator=(const U &u) { // ここでT.operator=()の代入演算を実行したい } } ((T)(*this)).operator=((T)(u))のようにキャストすればいけるかと思ったんですが、 コンパイルエラーでした。 よろしくお願いします。 また、これはプログラム上好ましくない手法でしたら、 別な実現方法をお教えください。

質問者が選んだベストアンサー

  • ベストアンサー
  • txrx
  • ベストアンサー率45% (83/184)
回答No.2

return T::operator=(u); //ここで ↑の位置に上記を記述します。 つまりアクセス指定を基本クラスにして、operator関数を直接記述します。

terra5
質問者

お礼

うまくいきました。 それとキャストは不要でした。 ありがとうございました。

その他の回答 (3)

noname#30727
noname#30727
回答No.4

たまたま見てしまったので・・・ #2さんの >return T::operator=(u); アップキャストは自動的に行われるから、この場合の引数にはキャストは不要で、T&をreturnするにはダウンキャスト無しには無理だから、戻り値は捨てた方が良さそうです。 T::operator=(u); //のこりの処理 return *this;

terra5
質問者

お礼

補足ありがとうございました。 既に、#2の回答でこの回答と同じ事をやってますが、 回答がある安心できます。

  • txrx
  • ベストアンサー率45% (83/184)
回答No.3

#2です。 ごめんなさい、間違ってます。 引数も基本クラスにあわせるようにキャストしてください。

  • 12m24
  • ベストアンサー率23% (193/817)
回答No.1

 なんか不自然ですが。 ・継承の記述  クラスParentからクラスChildに継承する場合、はじめのクラスの宣言で class Child : public Parent {//うんぬん } の様に、セミコロンひとつで区切ります。 ・publicなどの未記入  具体的な動作はコンパイラごとに異なりますが、public, protected, privateの記入をしなかった場合、多くのコンパイラはprivateで宣言されたものとして扱います。private宣言されたものは継承できませんので、publicまたはprotectedを記入してください。

terra5
質問者

補足

簡単なサンプル書こうとして、抜かしてしまいました。 細かいチェック恐れ入ります。