C++基礎知識(四)——学習ノート

4510 ワード

プロセス向けプログラミング:
問題解決のプロセスステップ、アルゴリズムに注目
 
オブジェクト向けプログラミング:
問題(クラス)、どのようなデータ(メンバー変数)、どのようなスキル(メンバー関数)を備えているかに注目します.
抽象:問題を解決できる「オブジェクト」(研究対象を観察)を見つけ、解決に必要なデータ(属性)、機能(メンバー関数)を見つけます.
カプセル化:抽象的な結果を1つのクラス(データ型)にまとめ、クラスオブジェクトをインスタンス化し、オブジェクトの属性を設定し、オブジェクトを呼び出す機能は問題解決の目的を達成する.
継承:問題を解決する前に、先に前のクラスが問題を解決できるかどうか、あるいは一部の問題を解決できるかどうかを探して、できれば古いクラスを継承してから再び開拓して、問題を解決する時間を短縮して、低減します
問題解決の難しさ.
マルチステート:オブジェクトのさまざまな形態で、外部から1つのオブジェクトが命令を出すのを見て、オブジェクトは自分の状況に応じて独特の反応をします.
 
一、クラスとオブジェクト
1、分析対象の属性と行為によって1つのクラスを設計する.
2、クラスはデータ型
単純タイプ:属性(変数)、C/C++組み込みデータ型のみを表す
配列タイプ:複数の属性(変数)を表すことができます.タイプは同じでなければなりません.
≪構造タイプ|Structure Type|oem_src≫:複数の属性(変数)を表すことができますが、動作(関数)がありません.
クラスタイプ:属性を表すことも、動作を表すこともでき、データ型を常に複合します.
3、オブジェクトはクラスというデータ型で作成されたインスタンスであり、構造変数に相当する.
class Student

{

      (    );

      (    );

};



Student stu;

 
二、クラスの定義とインスタンス化
1、類の一般形式
    class    :        
    {
    public/private/protected: //        

            ;

        //     
          (   )
        {
            
        }

        //     
        ~  (void)
        {

        }
    };

2、クラスのアクセス制御制限子
public:パブリックメンバーで、どこでもアクセスできます
private:プライベートメンバーで、クラス(独自)のメンバー関数にのみアクセスできます.
protected:保護されたメンバーで、クラス(独自)とサブクラスにのみアクセスできます.
注意:クラス内のメンバー変数、メンバー関数のデフォルトはprivate、構造内のメンバーおよびメンバー関数のデフォルトはpublicです.
注意:C++のクラスと構造の違いは、メンバー関数とメンバー変数のデフォルトのアクセス権だけが異なります.
3、構造関数
1)コンストラクション関数とは:クラスの同名関数がコンストラクション関数であり、戻り値はありません.
2)いつ呼び出すか,誰が呼び出すか,何回呼び出すか.
クラスオブジェクトを作成すると自動的に呼び出され(クラスオブジェクトを作成するたびに呼び出されます)、オブジェクトはライフサイクル全体で必ず呼び出されます.
1回呼び出すと、1回しか呼び出されません.
3)担当すること
メンバー変数の初期化、関連リソースの割り当て、オブジェクトの初期状態の設定.
class    :        

{

    //     

      (   )

    {

    }

};

4、タイプの作成プロセス
1.スタックまたはスタックに関係なく、タイプを割り当てるために必要なスペース.
2.実パラメトリック呼び出しコンストラクション関数を渡し、次のタスクを完了します.
1)継承テーブルから親クラスのコンストラクション関数を順番に呼び出す
2)メンバー変数のコンストラクション関数をメンバー変数の順に呼び出す.
3)コンストラクション関数体のコードを実行する.
注:コンストラクション関数を実行するコードは、コンストラクション関数全体の最後のステップです.
関数コードを構築するために必要なすべてのリソースと前提条件が、コードの実行前に十分に準備され、正しい初期化が得られることを保証します.
5、オブジェクトの作成方法
1.スタックに作成:クラス名オブジェクト//かっこは不要
クラス名オブジェクト(実パラメータ);
2.スタックに作成:クラス名*オブジェクトポインタ=newクラス名;
クラス名*オブジェクトポインタ=newクラス名(実パラメータ);
3.複数のオブジェクトを作成するには:
クラス名オブジェクト={クラス名(実パラメータ),クラス名(実パラメータ)}
クラス名*オブジェクトポインタ=newクラス名[n]{クラス名(実パラメータ)}
注意:mallocで作成したクラスオブジェクトは、コンストラクション関数を呼び出すことはできません.
注意:new[]で作成したオブジェクトは、delete[]で解放する必要があります.
6、クラスの宣言、実装、呼び出し
1.ヘッダファイルで宣言
class    :        
{
        ;
public: //        
    //     
      (   );
    //     
    ~  (void);
    //       
           (    );
};

2.ソースファイル実装クラスの関連関数
      ::   (    )

{

}

 
3.呼び出すときはヘッダファイルをインポートし、クラス関数が存在するソースファイルとともにコンパイルするだけです.
注意:クラスの内容が多くない場合は、ヘッダファイルで完全に実装することが考えられます.
単純なメンバー関数は、ヘッダファイルのみで実装することもできます.
注意:クラスで自動的に生成される関数は、ソースファイルで実装される場合もヘッダファイルで宣言する必要があります.
 
classとstructの違いは?
classのデフォルト継承とアクセス権はprivateであり、structのデフォルト継承とアクセス権はpublicである.classはテンプレートのパラメータを作ることができますが、structはできません.
 
三、構造関数と初期化リスト
1、コンストラクション関数をリロードすることができます(同じ名前の関数は複数の異なるバージョンがあります)
2、デフォルトの構造は、コンパイラが自動的に生成する何もしない構造関数です(コンパイルエラーを避ける唯一の役割です).
注意:クラスがパラメトリック構造を実装すると、デフォルトの構造は自動的に生成されず、必要に応じて表示して書く必要があります.
3、無パラメトリック構造は必ずしも無パラメトリックではありません.このような構造関数を呼び出すには、パラメトリック構造のすべてのパラメータにデフォルトのパラメトリックを設定する必要はありません.
 
注意:いわゆる「コンパイラ生成の○○関数」は、実際の文法的な意味での関数ではなく、機能的な意味での関数であり、コンパイラは実行可能な命令の生成者として、ある機能を持つバイナリ命令を直接生成し、高度な言語の意味での関数を借りてこのタスクを完了する必要はありません.
 
注意:クラスが他のクラスのメンバー変数である場合は、Bのコンストラクション関数が実行されるとメンバー変数の非パラメトリック構造が実行され、クラスBはクラスAのメンバー変数にパラメータを提供できないことを保証する必要があります.
4、単一パラメトリック構造とタイプ変換
コンストラクション関数のパラメータが1つしかない場合、Test=n文はエラーが発生せず、タイプ変換の効果を達成するために単一パラメータ構造を自動的に呼び出します.
このタイプの変換を禁止するには、単一パラメータ構造の前にexplicitを追加する必要があります.
5、初期化リスト
クラスメンバーの初期化に使用します.
コンストラクション関数(パラメータ):メンバー1(パラメータ1)、メンバー2(パラメータ2)...
const int num;
Test(int n):num(n)
{
}
初期化リストを使用して、クラスメンバー変数にパラメータを渡し、クラスメンバーのパラメータ構造を呼び出します.
初期化リストはconstメンバー、参照メンバーにも初期化できます.
#include 
using namespace std;

class A
{
public:
	int num;
	A(int _num)
	{
		num = _num;
		cout<

 
メンバーの初期化順序は、初期化リストとは関係なく、クラス内の定義順序に関係します.
#include 
using namespace std;

class A
{
public:
	A(int n)
	{
		cout<

注:初期化リスト実行クラスメンバー変数はまだ定義されていません.