OOP(オブジェクト指向プログラミング)は、データの抽象化、継承、および動的結合の核となるアイデアです。
1.継承
C ++言語では、関連する機能の基本クラス型と派生クラスは異なる扱い機能の直接の後継者を変更するには、何もしません。いくつかの機能のために、自身の各バージョンのクラス定義を派生基本クラス望まれ、この時点では、基本クラスの仮想関数は、これらの機能(仮想関数)として宣言されます。
1 クラス引用{ 2 公共: 3 のstd :: 文字列 ISBN()CONST 。 4 仮想 ダブル net_price(スタンダード:: size_tのN)CONST 。 5 }。
派生クラスでは明らかに派生リスト(クラスの派生リスト)を使用して、基本クラスから来ている(これは)それはの後継者であることを示す必要があります。
次のように:
1 クラス Bulk_quote:公共引用{ 2 公共: 3 二重 net_price(スタンダード:: size_tの)CONST オーバーライド。 4 }。
派生クラスは、その内部になければならない宣言のすべての仮想関数を再定義しました。派生クラスは、そのような関数の前にvirtualキーワードを追加することができますが、そうする必要はありません。そして、11は明示的に書き換え機能部材ベースクラスの仮想関数を使用するかを示すC ++標準では、新しい派生クラスを可能にします。、具体的な施策は、パラメータリスト関数の後に変更されたキーオーバーライドを向上させます。
1.1アクセス制御と継承
1の#include <iostreamの> 2 クラスA { 3 公共: 4 INT P = 0 。 5 仮想 ボイド試験()。 6 プライベート:int型 P2 = 1 ; 7 保護:INT P3 = 2 。 8 }。 9 10 、空隙A ::テスト() 11 { 12 のstd :: COUT << この - > P << この - > P2 << この - > P3 << はstd :: ENDL。 13は } 14 15 クラス B:パブリックA { 16 公共: 17。 int型 B = 3 ; 18は、 ボイド検査(){ 19。 STD :: << COUT この - > << B この - > B2 << この - > << B3 :: ENDL STD; 20 } 21が 22である ボイド(TEST2){ 23である STD :: << COUT この - > P3 :: STD << ENDL; // 派生クラスはパブリック基本クラスにアクセスし保護することができる 24 } 25 26である 友達ボイドTEST3(){ 27 のstd :: COUT << この - > << はstd :: ENDL。 28 } 29 プライベート:int型 B2 = 4 。 30 保護:int型 B3 = 5 。 31 }。 32 33 のint main()の 34 { 35 A。 36 のstd :: coutの<< AP <<はstd ::てendl; // 只能访问自己的パブリック 37 a.test()。 38 39 BのB。 40 のstd :: coutの<< BB << BP <<はstd ::てendl;// 派生クラスは、自分の公開鍵とpuiblicベースクラスにアクセスできる 41である )(b.test; 42である 43れます }
2.動的バインディング
我々は、基本クラスの使用C ++言語で参照(またはポインタ)と、仮想関数動的バインディングを呼び出すことが起こります。派生クラスへの明確な呼び出しは、メソッドを印刷し、最終的に呼び出します。
例えば:
1の#include <iostreamの> 2 クラスA { 3 公共: 4 A()= デフォルト。 5 仮想 ボイドプリント(){ 6 はstd :: COUT << " " << はstd :: ENDL。 7 } 8 仮想〜A(){ 9 はstd :: COUT << " 破壊A " << はstd :: ENDL。 10 }。 11 }。 12 13 クラス B:パブリックA { 14 公共: 15 B()= デフォルト。 16 ボイドプリント(){ 17 のstd :: COUT << " B " << はstd :: ENDL。 18 } 19 〜B(){ 20 のstd :: COUT << " Bを破壊する" << はstd :: ENDL。 21 } 22 23 }。 24 25 のint main()の 26 { 27 A。 28 BのB。 29 a.print()。 30 b.print(); 31である 32 /// 動的バインディング基底クラス、仮想関数の印刷方法ではない場合、次の結果がA.た 33は = A2 *&A 、 34である * = B2&B; 35 A2->プリント(); // 36 B2->印刷(); // B 37 [ 38は、 A&A 3 = A、 39 A&B3 = B; 40 a3.print(); // 41である (b3.print); // B 42である43 /// 強制的に基底クラスコール44である// BA ::プリント(); // 45 // B2-> A ::プリント(); // 46 // b3.A ::プリント(); // 47 48 }