C ++のパッケージの3つのプロパティ、継承とポリモーフィズム

 

このようなコードのパッケージは、モジュール式であり得ることを、その目的は、再利用をコーディングすることで、既存の拡散符号を継承することができます。そして、多型の目的は、インターフェイスを再利用することです

  • パッケージ:パッケージは、設計クラスの基本的な原理は抽象データが得られ、作用(または機能)は、有機全体を形成するように結合されている、すなわち、データは有機」の形成、操作データと組み合わされデータとメンバ関数は次のようにされたクラス」。

  • 継承:別のカテゴリA「から継承した」カテゴリーBは、Bは「カテゴリーBの父」と呼ばれる「Aのサブクラス」、およびAとしてこれを置く場合も、「スーパークラスB」と呼ぶことができます。継承は、再び同じコードを記述する必要がなく、親クラスの様々なサブクラスなプロパティやメソッドを持つことができます。玲子のカテゴリは親クラスを継承しながら、あなたはとても親カテゴリ別の関数を取得するには、特定の属性を再定義し、いくつかのメソッド、プロパティと覆われている元の親カテゴリのメソッドをオーバーライドすることができます。

    1. アクセス

      • 公共:内部親オブジェクト、親オブジェクトの外部、内部のサブクラスのオブジェクトは、サブクラスでは、外部のオブジェクトにアクセスすることができます。
      • 保護:内部サブクラスのオブジェクト内の親オブジェクトは、親オブジェクトの外にアクセスすることができ、子オブジェクトは、クラスの外にアクセスすることはできません。
      • プライベート:親オブジェクト内でアクセスすることができ、他にはアクセスできません。

      |アクセスオブジェクト|公共|保護|プライベート|
      | - | - | - | - |
      |親|表示|表示|表示|
      |サブクラス|表示|表示|目に見えない|
      |親外部|表示|目に見えません|目に見えない|
      |サブクラス外部|表示|目に見えない|目に見えません|

    2. 継承
      PS。継承の3種類は、親クラスのアクセス制御権の親クラスの外観のサブクラスを親クラスへのサブクラスは、アクセス方法には影響しません。継承は、親クラス(とも呼ばれる基本クラス)の呼び出し元(別名ユーザ)の(また、派生クラスと呼ばれる)は、サブクラスへのアクセスを制御する方法です。サブクラス内の対応する権限に親クラスへのパブリックアクセスと同等の相続の公開、保護された、プライベート三種類、。このクラスのプライベートアクセス制御権にprivate継承、親クラスの公共のメンバーと保護されたメンバー、保護された相続として、親クラスは、パブリックメンバーのアクセス制御、このクラスで保護された権利になります。

      PS。友人がクラスレベルで、承継のは間違いありません。

  • 多型:多型は単に「一つのインタフェース、複数の方法」のようにまとめることができ、プログラムは実行時の関数呼び出しで決定し、それはオブジェクト指向プログラミングの分野で中心的な概念です。多型(多型)、形状の文字通り多様。

    1. 静的ポリモーフィズム:静的な多型は、静的結合または事前バインディングとして知られています。コンパイル時に、コンパイラは、関数を呼び出す対応する機能が存在する場合、その関数を呼び出すと推測関数の引数の種類に応じて、コンパイラは、(暗黙的型変換であってもよい)、そうでない場合、コンパイルエラーを終了します。

      • 関数のオーバーロード

        コンパイラの機能パラメータリストによっては、機能の同じ名前の名前は、同じ名前の関数は(少なくともこのようなコンパイラのため)別の関数になった、変更されています。コンパイラ間の通話機能は、それが静的であり、同定されています。言い換えれば、コンパイル時そのアドレスがバインド(事前バインディング)。

      • ジェネリックプログラミング

        一般的なプログラミングは、テンプレート関数とテンプレートクラスとして、コードの特定の種類の書面独立、C ++におけるジェネリックの主要業績を指します。
        一般的な機能:

          1. 函数模板并不是真正的函数,它只是C++编译生成具体函数的一个模子。
          1. 函数模板本身并不生成函数,实际生成的函数是替换函数模板的那个函数,比如上例中的add(sum1,sum2),这种替换是编译期就绑定的。
          3. 函数模板不是只编译一份满足多重需要,而是为每一种替换它的函数编译一份。
          4. 函数模板不允许自动类型转换。
          5. 函数模板不可以设置默认模板实参。比如template <typename T=0>不可以。
        
    2. ダイナミックな多型の
      C ++多型は、動的な仮想関数に基づいています。その後、それらの間に設定共通の特徴を決定する関連するオブジェクトタイプ、基底クラスのため、これらの共通の特徴は、仮想共通機能インターフェース複数として宣言しました。サブクラスは、特定の機能を実行するために、これらのそれぞれの仮想関数をオーバーライドします。基底クラス、仮想関数呼び出しを指す参照またはポインタによって、これらのオブジェクトを操作するためのクライアント・コード(動作機能)は、実際にアップ提供サブクラスオブジェクトに自動的にバインドされます。

    3. (?)多型マクロ
      マクロ変数は静的多型の基本的な形で達成することができます。

      #include <iostream>
      #include <string>
      
      // 定义泛化记号:宏ADD
      #define ADD(A, B) (A) + (B);
      
      int main()
      {
          int i1(1), i2(2);
          std::string s1("Hello, "), s2("world!");
          int i = ADD(i1, i2);                        // 两个整数相加
          std::string s = ADD(s1, s2);                // 两个字符串“相加”
          std::cout << "i = " << i << "/n";
          std::cout << "s = " << s << "/n";
      }
      
    4. 動的および静的ポリモーフィズム以上の状態

      1. 静的ポリモーフィズム
        • 利点:
          1. 多型は、コンパイル時に行わ静的に起因する、より高い効率がコンパイラを最適化することができます。
          2. そのような部分的な特殊化、特定の種類を処理するために完全な専門などによって、強いフィット感と疎結合を有します。
          3. 最も重要なことは、静的な多型C ++テンプレートプログラミングによってもたらすことです、このような強力なSTLライブラリとして、一般的なデザインのコンセプトです。
        • 短所:
          1. それは静的ポリモーフィズムを実現するためのテンプレートであり、そのような困難なデバッグなどの静的ポリモーフィズムの欠点であり、したがって、不適切なテンプレートなので、コンパイラとの互換性でサポートされている時間のかかるコンパイルし、コードの膨張は、オブジェクトの異種コレクションを扱うことができません
      2. ダイナミックな多型
        • 利点:
          1. オブジェクト指向設計、客観的世界の直感的な理解。
          2. インタフェースの分離を達成するために、再利用可能
          3. オブジェクトの同じ継承階層異種コレクションの処理能力
        • 短所:
          1. 実行時バインディングを実行するためのオーバーヘッドをある程度ました。
          2. コンパイラは、仮想関数を最適化することはできません
          3. インタフェースを変更するためのクラス階層全体に影響を与えるヘビークラスの継承システム、;
      3. 違い:
        • 異なる早晚绑定自然今、テンプレートによって行われた、意思決定をコンパイル時の静的ポリモーフィズム、および達成するための継承、仮想関数によって、実行時の意思決定での動的多型;
        • 動的インターフェイスの多型がで、明示的であり函数签名、静的マルチステーションインターフェイスがで暗黙である仮想関数を介して実行の多型を達成するために、中央有效表达式センター、多型コンパイルを有するテンプレートは完了します
      4. 同じポイント:
        • 私たちは、多型、静的ポリモーフィズム/コンパイル時ポリモーフィズム、動的な多状態/実行時のポリモーフィズムを実現することができます。
        • コネクタを実現することができ、相分離は、テンプレートがインターフェイスで定義されていることを、実現するパラメータのタイプを定義、基底クラスの仮想関数はインタフェースで定義され、クラスが継承を実装する責任があります。

 

おすすめ

転載: www.cnblogs.com/liangyc/p/11628223.html