ホーム » 2020 » 10月 » 01

日別アーカイブ: 2020年10月1日

2020年10月
 123
45678910
11121314151617
18192021222324
25262728293031

最新の投稿(電子情報)

アーカイブ

カテゴリー

オブジェクト指向のUML図

専攻科2年のオブジェクト指向プログラミングでは、レポート課題の最終テーマがUMLで自分の特別研究のテーマを表現する内容。
今年のレポートでは、なかなかいいUML図を書いてくる人が多かったので、メモ。


参照渡しを積極的に使う

オブジェクト指向のレポート課題を採点していると、若干きになることがあったので、補足説明。

複素数クラスのレポート課題で、add() などのメソッドが、私がサンプルコードで示したのがそうなっていたのが原因だと思うけど、以下のようなコードとなっている。

class Complex {
   // 略
public:
   void add( Complex z ) { re += z.re ; im += z.im ; }
   //        ~~~~~~~~~ 値渡し
} ;

処理速度の効率を考える場合は、以下のような参照型(参照渡し)を使うのが一般的。上記のような値渡しだと、機械語を生成する際には、実引数の複素数のコピーが行われるので、無駄な処理が発生しがち。参照型を使えば実引数をコピーする手間が不要なので、処理の無駄が省ける。(Complexのような簡単なクラスなら無駄というほどのものじゃないけど)

class Complex {
public:
   void add( const Complex &z ) { re += z.re ; im += z.im ; }
   //        定数型 ~~~~~~~~~~参照渡し
} ;

ただ、上記の参照型を使うと、addメソッドで、zの内部を書き換えるような間違った処理を記述してしまうと、add()の処理で実引数に副作用が発生する。このため、こういった書き間違いによる影響がないことを明示するために、上記のように、z に const 指定子を記載しておくのが一般的。const がついていれば、addメソッド内部で間違って、zを書き換えるような処理を記載しても、コンパイラが間違いを指摘してくれる。