December 23, 2003constだらけのC++[Computer]
バイトの関係で、C++を最近使い始めました。一週間が経ちSTLぐらいまでは速習で使いこなせるようになったみたいですが、ここで問題発生。C++特有のconstで混乱しました。 もともとがJavaプログラマゆえ、クラスのカプセル化には異常なまでにこだわりをもってC++のコードを書いていました。その情熱がconstにも向けられたため大変なことに。 #include <necessaryHeader>
class Hoge{ class Ada{ int main(){ 簡単に説明するとクラスHogeのインスタンスから得られたAda *の内容は大抵の場合変更したくはないが、一部だけ(この場合flag)変更することを許したい場合。このためにflagを変更するAda::switch()ではswitch() const{}とせずにswitch(){}とし、それを呼び出すAda::getFlagSwitched()ではconst{}としていませんが、こうすると『型があわない』とコンパイラに文句をいわれます。どうすればいいか?? ここでキャストconst_castの登場です。これを使用することによって一次的にconstをキャンセルすることができます。使い方はconst_cast<targetType>(arg)です。 例として先のコードは以下のようにすればコンパイルエラーとなりません。(Ada::getFlagSwitched()だけ変更) const bool Ada::getFlagSwitched() const{return (const_cast<Ada *>(this))->switch();}
別の解決方法としてint main()のほうで int main(){
Hoge hoge(); const Ada *ada_hoge = hoge.getAda(); cout << ada_hoge->getFlag() << endl; cout << (const_cast<Ada *>(ada_hoge))->getFlagSwitched() << endl; } もありなんですが、ライブラリ側で対応したほうが適切だと思います。 コメント
コメントする
|
スポンサード リンク
|