C ++ベース(7) - オブジェクト指向プログラミング

  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      }
 19B(){
 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 }     
 

 

  

おすすめ

転載: www.cnblogs.com/KongHuZi/p/11530992.html