>  > ★送料無料★(一部離島等除く) EJ20 EJ15 EJ18 EJ16 スプリング【アールエスアール】サスペンション インプレッサワゴン GG2 1500 NA [14/11~] Ti2000 DOWN - 1台分

プロジェクトμ タイプPS フロント左右セット ブレーキパッド シビック FD1 F304 プロジェクトミュー プロミュー プロμ TYPE PS ブレーキパット【店頭受取対応商品】

★送料無料★(一部離島等除く) EJ20 EJ15 EJ18 EJ16 スプリング【アールエスアール】サスペンション インプレッサワゴン GG2 1500 NA [14/11~] Ti2000 DOWN - 1台分



★送料無料★(一部離島等除く) EJ20 EJ15 N84W EJ18 EJ16 スプリング【アールエスアール】サスペンション インプレッサワゴン GG2 1500 NA [14/11~] Ti2000 フロントブレーキパッド DOWN - 1台分

GG2 EJ18 Ti2000 スプリング【アールエスアール】サスペンション DOWN ★送料無料★(一部離島等除く) [14/11~] 1500 NA 1台分 EJ20 EJ15 EJ15 インプレッサワゴン EJ16 Ti2000 -

ポリモーフィズムとは、メソッドに複数の(多様な)振る舞いを対応させるというオブジェクト指向の概念です。

同じメッセージを送って 【送料無料】 195/60R15 15インチ WEDS ウェッズ ライツレー ZM 6J 6.00-15 YOKOHAMA ヨコハマ ブルーアース AE-01F SALE サマータイヤ ホイール4本セット、メッセージを受け取ったインスタンスがそのクラスによって違う振る舞いをすることです。


C++におけるポリモーフィズムとは

C++におけるポリモーフィズムとは、同じ名前を使って異なる実装の関数にアクセスできる仕組みです。

つまり、一つの名前で二つ以上の関連する目的に使用できる仕組みといえます。

C++では、「継承」と「仮想関数」を利用することで 柿本改 KRノーブルエリッセ ブラックダイア マフラー ハイエース/レジアスエース CBF-TRH200V T51391C 取付セット KAKIMOTO RACING 柿本 KR noble Ellisseブラックダイア スポーツマフラー【店頭受取対応商品】、ポリモーフィズムを実現します。


ポリモーフィズムの実装

継承の利用について

継承を利用することで、基底クラスへのポインタは派生クラスを指すことができます。

(なお、派生クラスのポインタで基底クラスのオブジェクトを指すことはできません。)

class Base{ ... };
class Derived : public Base{ ... };
Base *ptr;
Derived object;
ptr = &object;

仮想関数について

仮想関数とは、基底クラスで「virtual」宣言され、

、派生クラスで再定義される関数です。

ポインタが指すオブジェクトを変更することで WinmaX STREET AT2 SUBARU フォレスター リア用 【品番655】 型式SJ5 年式12.07- スーパーローシートレール RX-7 FC3S 85/10~92/10 サイド止めフルバケ対応、ひとつの関数呼び出しで複数の関数を実行できます。

virtual void function(int argument){
 // 関数の定義
}

ポリモーフィズムの実現

基底クラスのポインタが派生クラスのオブジェクトを指している状態で仮想関数speak()を呼び出すと、オブジェクトの関数speak()を呼び出します。

#include <iostream>
class Human{ // 基底クラス
public:
 virtual void speak(){ printf("I am human.\n"); } // 仮想関数
};
class Girl : public Human{
public:
 void speak(){ printf("I am girl.\n"); }
};
class Boy : public Human{
public:
 void speak(){ printf("I am boy.\n"); }
};
int main(void)
{
 Human *ptr;
 Girl alice;
 Boy bob;
 ptr=&alice; ptr->speak();
 ptr=&bob; ptr->speak();
 return(0);
}

純粋仮想関数について

基底クラスの仮想関数の呼び出しを禁止するには DIXCEL/ディクセル ブレーキパッド エクストラスピード フロント ニッサン SKYLINE スカイライン 排気量3500 年式04/11~07/10 型式CPV35 品番ES321462、「純粋仮想関数」を用いることで対応できます。

純粋仮想関数を持つクラスは「抽象クラス」となり 、オブジェクトの生成ができなくなります。

これにより、「派生クラスで必ず対応するメソッドを定義しなければならない」というルールを定めることができます。


純粋仮想関数を定義するには、下記のように「関数に0を代入する」という形式で記述します。

virtual void func() = 0; // 純粋仮想関数の定義

RTTI(Run-Time Type Identification:実行時型識別)

RTTIとは

RTTIとは、オーバーライドされた仮想関数の型を取得する機能です。

ポリモーフィズムの利用に際して、

★送料無料★(一部離島等除く) EJ20 EJ15 EJ18 EJ16 スプリング【アールエスアール】サスペンション インプレッサワゴン GG2 1500 NA [14/11~] Ti2000 DOWN - 1台分

、基底クラスのポインタがどの型のオブジェクトを指しているかコンパイル時に決定できない場合に使用します。


実行時型情報を得るには「typeid」演算子を用います。

typeid演算子を利用するにはtypeinfoをインクルードする必要があります。

#include <iostream>
#include <typeinfo>
class Human{ // 基底クラス
public:
 virtual void speak() = 0;
};
class Girl : public Human{
public:
 void speak(){ printf("I am girl.\n"); }
};
class Boy : public Human{
public:
 void speak(){ printf("I am boy.\n"); }
};
int main(void)
{
 Girl alice;
 Boy bob;
 Human *ptr[] = {&bob, &alice};
 for(int i=0; i<2; i++){
 // 型の名前を出力する
 printf("%s\n", typeid(*ptr[i]).name());
 // 型がGirlならばメソッドを実行する
 if(typeid(*ptr[i]) == typeid(Girl)) ptr[i]->speak();
 }
 return(0);
}

関連ページ



スポンサード リンク





編集中記事 | 管理用

Copyright ©★送料無料★(一部離島等除く) EJ20 EJ15 EJ18 EJ16 スプリング【アールエスアール】サスペンション インプレッサワゴン GG2 1500 NA [14/11~] Ti2000 DOWN - 1台分 All Rights Reserved. (c) 2019 CapmNetwork. All Rights Reserved.

{yahoojp}jpprem01-zenjp40-wl-zd-2106