April 30, 2004鶏が先だと思われ[Computer]
C++には演算子のオーバーロードという便利な機能があって、+(プラス)や-(マイナス)なども関数として定義することが可能な言語仕様になっています。この前の行列ライブラリ作成の際もこの機能にはお世話になりました。 で、ふと思ったことなのですが、自己改変をするメソッド(例えば+=とか)と、自己改変をしないメソッド(例えば+とか)、どちらの定義が本質的なのでしょうか。 以下の例を見てください。この例はメンバ変数がポインタであり、代入演算子やコピーコンストラクタではデフォルトの動作でシャローコピー(アドレスのコピー)しか行われません。 template<class T>
class Hoge{ private: T *member; public: Hoge(T ada){member = new T(ada);} ~Hoge(){delete member;} Hoge copy(){ Hoge &operator+=(const Hoge &hoge){ //自己改変するメソッド 自己改変するメソッドを先に定義することによって自己改変しないメソッドの定義が簡単にできます。 オブジェクト指向というのは、デフォルトの操作がオブジェクトを増やさない方向にあることもあわせて考えれば、自己改変をすることこそ、メソッドの定義として本質的なのでは。 コメント
はい、まさしくそのとおり。 コメントする
|
スポンサード リンク
|