- ベストアンサー
C++で継承元のクラスの代入演算子を呼び出す方法
C++であるクラス継承したクラスの代入演算子で 継承元のクラスの代入演算子を呼び出す方法がわかりません。 こんな感じのソースです。 class T { T& operator=(const T &t) { } } class U :: T{ U& operator=(const U &u) { // ここでT.operator=()の代入演算を実行したい } } ((T)(*this)).operator=((T)(u))のようにキャストすればいけるかと思ったんですが、 コンパイルエラーでした。 よろしくお願いします。 また、これはプログラム上好ましくない手法でしたら、 別な実現方法をお教えください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
return T::operator=(u); //ここで ↑の位置に上記を記述します。 つまりアクセス指定を基本クラスにして、operator関数を直接記述します。
その他の回答 (3)
たまたま見てしまったので・・・ #2さんの >return T::operator=(u); アップキャストは自動的に行われるから、この場合の引数にはキャストは不要で、T&をreturnするにはダウンキャスト無しには無理だから、戻り値は捨てた方が良さそうです。 T::operator=(u); //のこりの処理 return *this;
お礼
補足ありがとうございました。 既に、#2の回答でこの回答と同じ事をやってますが、 回答がある安心できます。
- txrx
- ベストアンサー率45% (83/184)
#2です。 ごめんなさい、間違ってます。 引数も基本クラスにあわせるようにキャストしてください。
- 12m24
- ベストアンサー率23% (193/817)
なんか不自然ですが。 ・継承の記述 クラスParentからクラスChildに継承する場合、はじめのクラスの宣言で class Child : public Parent {//うんぬん } の様に、セミコロンひとつで区切ります。 ・publicなどの未記入 具体的な動作はコンパイラごとに異なりますが、public, protected, privateの記入をしなかった場合、多くのコンパイラはprivateで宣言されたものとして扱います。private宣言されたものは継承できませんので、publicまたはprotectedを記入してください。
補足
簡単なサンプル書こうとして、抜かしてしまいました。 細かいチェック恐れ入ります。
お礼
うまくいきました。 それとキャストは不要でした。 ありがとうございました。