譚浩強《C++対象向けプログラム設計》知識点総括


1 C++初歩知識
1.1 C++の入出力
  • 入力:標準入力ストリームオブジェクトistreamと抽出演算子cin>>
  • を用いる.
  • 出力:標準出力ストリームオブジェクトostreamと挿入演算子cout<<
  • を用いる.
    1.2関数のリロード
    1名多用、リロード関数を要求するパラメータの個数またはタイプが元のものと異なる
    1.3関数テンプレート
    機能の似たような関数に統一的なテンプレートを作成する
  • 要求:関数のパラメータ個数は元のものと同じ
  • である.
  • フォーマット:template
  • 1.4変数の参照
    変数に別名を付けることに相当する、変数とその参照は同じメモリ空間e.gを共有する.
    int a;
    int &b = a; //  b   int   a   
    

    1.5文字列変数
    Stringクラス
    1.6動的割当て/取り消しメモリ:newとdelete
  • 形式:
  • new   (  ) //             
    new   [num] //new    num        
    delete [ ]      //[ ]         ,  
    

    2クラスとオブジェクトの特性と使用
    2.1オブジェクト
    属性としてのデータ・メンバーと、特定の機能を実現するためにデータを操作するために使用される動作としてのメンバー関数が含まれます.
    2.2プロセス向けプログラミングVSオブジェクト向けプログラミング
  • プロセス向けプログラミング:プログラム=データ構造+アルゴリズム
  • オブジェクト向けプログラム設計:オブジェクト=データ構造+アルゴリズム、プログラム=オブジェクトs+メッセージ
  • 2.3オブジェクト向けプログラミングの4つの主な特徴
  • 抽象:関連する事物をまとめ、同じ事物の本質を表す役割を果たす.クラスはオブジェクトの抽象であり、オブジェクトはクラスの具体的な表現形式である.
  • パッケージ:データと操作データの関数をバインドし、具体的な実装の詳細を非表示にし、インタフェースのみを外部に保持します.
  • 継承:既存のクラスを利用して新しいクラスを確立し、新しいクラスは既存のクラスからその既存の特性を得るメカニズム.
  • マルチステート:異なるオブジェクトが受信した同じメッセージに対して異なる動作を生じる現象(単一インタフェース、マルチインプリメンテーション)
  • 2.4クラスの宣言とオブジェクトの定義
    クラス宣言形式:
    class   
    {
    	private:
    		          ;
    	public:
    		          ;
    };
    

    オブジェクト定義フォーマット
          ;
    

    2.5クラスのメンバー関数
  • クラスメンバー関数は、クラスの外部インタフェース
  • であるpublicとして一般的に呼び出される必要があるメンバー関数にアクセスすることができる.
  • 関数体が短い(3行以内)メンバー関数はクラス内で宣言および定義できます.一般的なメンバー関数では、一般的にクラス内で宣言し、クラス外で定義します(クラス名とドメイン演算子::を追加することを忘れないでください).
  • 2.6オブジェクトメンバーの参照
  • オブジェクト名およびメンバー演算子.を介してオブジェクトのメンバー
  • にアクセスする.
  • オブジェクトの参照およびメンバー演算子.を介してオブジェクトのメンバー
  • にアクセスする.
  • は、オブジェクトへのポインタp->を介してオブジェクトのメンバー
  • にアクセスする.
    2.7構造関数と構造解析関数
  • 構造関数によりオブジェクトを初期化(パラメータによる初期化テーブルを含む)
  • .
  • 構造関数によるクリーンアップ等の作業
  • 構造と構造関数の実行順序:後構造の先析(類似スタック)
  • 2.8静的データ・メンバー
    同類の複数のオブジェクト間でデータ共有を実現でき、メモリに1つのスペースしか占めません.静的データ・メンバーは、オブジェクトではなくクラスが所有するため、コンストラクション関数では初期化できません.クラスの体外でのみ初期化できます.書式:
    static        ;
    

    2.9 Friend関数とFriendクラス
    キーワードfriendで友元関数を宣言するには2つに分けられ、一般関数を友元関数と友元メンバー関数として宣言します.
    2.10クラステンプレート
    クラスの抽象であり、多用フォーマットを実現します.
    template 
         
    

    3演算子の再ロード
    3.1演算子のリロードは、リロード演算子を定義する関数です.
    書式:
         operator   (   ) //"operator   "          
    	{          }
    

    3.2リロード演算子タイプ
  • クラスメンバー関数として使用:単一演算子のリロードでよく使用される
  • は友元関数として使用されます:両目演算子のリロードによく使用されます
  • 3.3リロードできる演算子
    次の5つの演算子を除いて、他の演算子は通常リロードできます.リロードできない5つの演算子:
  • メンバーアクセス演算子.&メンバーポインタアクセス演算子.*
  • 役割ドメイン演算子::&長さ演算子sizeof:操作対象はクラス
  • 条件演算子? :
  • 3.4入出力演算子の再ロード
  • リロードストリーム抽出演算子>>:istream& operator>>(istream& input, &)
  • リロードストリーム挿入演算子<<:ostream& operator<
  • 3.5オブジェクトと標準データ型の変換
  • その他のデータ型->クラスオブジェクト:変換コンストラクション関数
  • を使用
  • クラスオブジェクト->別のタイプデータ:タイプ変換関数を使用して、フォーマットoperator { }
  • 4継承と派生
    4.1意味
    既存のクラス(親クラス、ベースクラスとも呼ばれる)を使用して新しいクラス(子クラス、派生クラスとも呼ばれる)を構築し、新しいクラスは既存のクラスからその既存の特性を取得し、親クラスにとって派生と呼ばれ、子クラスにとって継承(個人理解)と呼ばれます.
    4.2継承分類
  • 単一継承:派生クラスは1つのベースクラスから
  • のみ継承されます.
  • 多重継承:1つの派生クラスに複数のベースクラスがある
  • 4.3ベースクラスと派生クラスの関係
    派生クラスはベースクラスの具体化であり,ベースクラスは派生クラスの抽象化である.
    4.4派生クラスの宣言方式
    class     :[    ]    
    	{         }
    

    4.5派生類の構成
    ベースクラスから継承されたメンバーと、自分で追加されたメンバーが含まれます.
    4.6派生クラスのアクセス属性
  • 共有継承public:ベースクラスの共有(public)および保護(protected)メンバーは、派生クラスにおいて既存の属性
  • を保持する.
  • プライベート継承private:ベースクラスの共有および保護メンバーは、派生クラスのプライベートメンバーになります(ベースクラスのプライベートメンバーはベースクラスプライベートであり、派生クラスではアクセスできません)
  • .
  • 保護継承protected:ベースクラスの共有メンバーと保護メンバーは、派生クラスの保護メンバーになります(共有メンバーとプライベートメンバーの間にあり、本クラスと本クラスの派生クラスにアクセスできます)
  • .
    4.7組み合わせ
    あるクラスで別のクラスのオブジェクトをデータ・メンバーとします.組合せも継承も既存のクラスのリソースを有効に利用するが,継承は縦方向の「はい」の関係,組合せは横方向の「有」の関係である.
    5多態性と虚関数
    5.1多態性
    異なるオブジェクトは、同じメッセージを受信すると、異なる動作(単一インタフェースマルチインプリメンテーション)を生成します.メッセージは関数を呼び出し、異なる動作は異なるインプリメンテーションを指します.
    5.2分類
  • 静的(コンパイル時の)多態性:関数リロードにより
  • を実現する.
  • 動的(実行時の)多態性:虚関数による
  • 5.3虚関数
  • は、virtualでベースクラスで仮想として宣言する派生クラスで正式に定義された関数
  • を意味する.
  • の機能により、派生クラスでベースクラスと同じ名前の関数を定義することができ、ベースクラスポインタまたは参照によってベースクラスと派生クラスの同じ名前の関数
  • にアクセスすることができる.
  • の使用法(1)ベースクラスでvirtualで虚関数を宣言する(2)派生クラスでこの関数をオンデマンドで再定義し、関数ヘッダ(インタフェース)を保持するように(3)ベースクラスオブジェクトを指すポインタ変数を定義し、その虚関数をオンデマンドで呼び出すオブジェクトを指すようにする(4)このポインタ変数でこの虚関数を呼び出す
  • .
    5.4関連
    呼び出した特定のオブジェクトを特定するプロセス、静的関連付けと動的関連付け
  • 静的(初期)関連付け:関数のリロード、オブジェクト名によって呼び出された虚関数
  • など、プログラムのコンパイル(静的構文チェックのみ)時に決定できる.
  • 動的関連付け:ベースクラスポインタによって呼び出された虚関数
  • のような関連付け関係を決定するには、実行フェーズでなければなりません.
    5.5虚構造関数
    ベースクラスの構造関数を虚関数として宣言する(動的割り当ての空間を取り消すときに継承システム内の各オブジェクトが正しく処理されることを保証できる)
    5.6純虚関数と抽象クラス
  • 純虚関数:虚関数を宣言するときに「0」に初期化された関数(「有名無実」、派生クラス定義対象)、一般形式virtual ( ) = 0;
  • 抽象クラス:オブジェクトを定義するのではなく、継承するクラスとして基本タイプとして使用されます.純粋な虚関数を含むクラスは抽象クラスであり,その役割はクラスファミリーとしての共通のベースクラスである.e.g.Shapeクラスは抽象クラスとして、ShapeName()は純虚関数として使用されます.これに基づいて、Pointクラス、Circleクラス、Cylinderクラスを順に定義して継承体系を構築し、対応するクラス宣言でShapeName()虚関数を必要に応じて再定義することができます.