「型変換」の版間の差分

削除された内容 追加された内容
編集の要約なし
37行目:
なお、上の例では型変換の構文をとってはいるが、実際の処理としては<code>c1</code>はコンストラクタへの引数として渡されている。そのため、本来必要のない<code>c1</code>のコピーが生成される。これを避けるために、変換元の型がユーザ定義型である場合には、通常は引数を[[参照 (情報工学)|参照]]として渡す。また、型変換という操作の意味を考えれば、変換元のインスタンスに変更を加えるということはあり得ないので、通常は引数に<code>const</code>修飾子をつけて変更不可とする。結局、コンストラクタの宣言は<code>explicit Class2(const Class1& c1) { ... }</code> のように書くことが多い。
 
=== 機能によるキャストとその分類 ===
C言語とその流れにある言語では、キャスト演算子によるキャスト式により、式の右辺値を指定された型に型変換する。この構文をキャストと呼ぶ。C言語のキャスト演算子は、型名を括弧で囲んだ、<code>(int)</code> のようなもので、目的の式に前置する。
 
==== アップキャスト ====
あるクラス<tt>Base</tt>と、<tt>Base</tt>から派生したクラス<tt>Derived</tt>があるとする。アップキャストとは、派生クラスから基底クラスへの型変換、すなわち<tt>Derived</tt>のインスタンスを<tt>Base</tt>に変換する操作である。「<tt>Derived</tt>のインスタンスは<tt>Base</tt>のインスタンスである」ことは保証されているので、一般的にはこの変換は安全である。そのため、多くの言語において、これは暗黙に行うことができる。