Cpp クラス 継承 アップキャスト 新しいページはコチラ

提供: yonewiki
移動: 案内, 検索
(ページの作成:「C++に戻る <table class="mbox-small" style="border:1px solid #aaa; background-color:#f9f9f9; width:22em;" id="RealTitleBanner"> <tr>...」)
 
(クラス 継承 アップキャスト)
11行: 11行:
 
<br />
 
<br />
 
== '''クラス 継承 アップキャスト''' ==
 
== '''クラス 継承 アップキャスト''' ==
 +
 継承は基底クラスの機能を派生クラスが引き継ぐというものでした。この関係を利用して、基底クラスのポインタが派生クラスのポインタを受け取れるというのがアップキャストです。キャストは役を割り当てるという意味で、出演者一覧の役当て表つまりはキャストがドラマのエンドロールに流れるのでもお馴染みの意味なのでしっくりきます。なにがアップなのか?というところでは、引っかかるものがあります。基底クラスではBaseといったり土台というような意味合いがつよく派生は上に乗っかってるクラスのようなイメージがありそうですが、派生クラスは基底クラスにぶら下がっているというイメージなら上へのキャストというのはしっくりくる。そういう意味でアップキャストです。
  
 +
 +
 だから?
 +
 +
 +
 派生クラスのポインタ変数が基底クラスのポインタ変数へ受け渡すことが出来るということを意味しています。つまり派生→基底をアップと言っています。受け渡すは役割を割り当てるキャストだと言っています。なんで、そんなことが出来るん?という感じもします。
 +
 +
 +
 考えてみると、派生クラスは、基底クラスを引き継いでいるし、派生クラス独自の関数や変数を持っているから、基底クラスよりも機能が多いはずです。そうすると、派生クラスは、少なくとも基底クラスは含んでいる。だから、キャスト(割り当て)しても基底クラスポインタは、基底の部分がしっかりとあるので、キャストできる。派生クラスから基底クラスにキャストは出来ます。その逆は出来ません。派生クラスだけが持っている何だか知りえない何かがあるのに基底クラスのポインタは派生クラスのポインタになれない。そういうことなのです。
 +
 +
 +
 で、何の役にたつのだい?そのアップキャストやらは…
 +
 +
 +
 基底クラスが派生クラスに対して働きかけるイメージです。基底クラスが、派生クラスを選ぶ。基底クラスがいろいろな派生クラスと結びつくことができて、基底クラスが持っている動作と派生クラス1の動作をまとめた動作、基底クラスが持っている動作と派生クラス2の動作をまとめた動作、基底クラスが持っている動作と派生クラス3の動作をまとめた動作、…基底クラスが持っている動作と派生クラスnの動作をまとめた動作のように、基底クラスは動きを切り替えることが出来るという技術です。何にでもなれるという意味でアップキャストはポリモーフィズム(polymorphism=多相性・多態性・多様性)と呼ばれている働きを実現させるモノになっています。
 +
 +
 +
 派生クラスは、基底クラスを引き継いで利用する。基底クラスはいろいろぶら下がった派生クラス(派生クラスからは基底クラスが上でアップキャスト)を選んで、いろいろな機能を利用するという関係です。自分はいまだに上とか下とかという言い方に違和感を感じていますが、そういう名前が付けられたということは理解したし、納得したという感じです。いわせてみれば、自分が折れてやった。そういう偉そうな立場に立ってみた。そして、見下される。そういうことだ。そう、そういうことなんだ。
  
  
 
[[C PlusPlus#C++からの技術|C++]]に戻る
 
[[C PlusPlus#C++からの技術|C++]]に戻る

2020年7月22日 (水) 00:00時点における版



個人用ツール
名前空間

変種
操作
案内
ツールボックス