カンパ〜イ!←最初の1杯目、なに頼む?

C++であるクラス継承したクラスの代入演算子で
継承元のクラスの代入演算子を呼び出す方法がわかりません。
こんな感じのソースです。

class T {
T& operator=(const T &t) {
}
}

class U :: T{
U& operator=(const U &u) {
// ここでT.operator=()の代入演算を実行したい
}
}

((T)(*this)).operator=((T)(u))のようにキャストすればいけるかと思ったんですが、
コンパイルエラーでした。

よろしくお願いします。

また、これはプログラム上好ましくない手法でしたら、
別な実現方法をお教えください。

A 回答 (4件)

return T::operator=(u);



//ここで
↑の位置に上記を記述します。
つまりアクセス指定を基本クラスにして、operator関数を直接記述します。
    • good
    • 0
この回答へのお礼

うまくいきました。
それとキャストは不要でした。

ありがとうございました。

お礼日時:2004/11/18 15:53

たまたま見てしまったので・・・



#2さんの
>return T::operator=(u);

アップキャストは自動的に行われるから、この場合の引数にはキャストは不要で、T&をreturnするにはダウンキャスト無しには無理だから、戻り値は捨てた方が良さそうです。

T::operator=(u);
//のこりの処理
return *this;
    • good
    • 1
この回答へのお礼

補足ありがとうございました。

既に、#2の回答でこの回答と同じ事をやってますが、
回答がある安心できます。

お礼日時:2004/11/18 15:59

#2です。


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

 なんか不自然ですが。



・継承の記述
 クラスParentからクラスChildに継承する場合、はじめのクラスの宣言で

class Child : public Parent
{//うんぬん
}

の様に、セミコロンひとつで区切ります。

・publicなどの未記入
 具体的な動作はコンパイラごとに異なりますが、public, protected, privateの記入をしなかった場合、多くのコンパイラはprivateで宣言されたものとして扱います。private宣言されたものは継承できませんので、publicまたはprotectedを記入してください。

この回答への補足

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

補足日時:2004/11/18 15:37
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報