C++基礎概念(まとめ)

1782 ワード

1.クラスとそのメンバー——パッケージ(encapsulation)
2.ベースクラスと派生クラス——継承(Inheritance)
3.thisポインタ:メンバー関数にthisポインタという非表示パラメータがあります.
class CShape{
...
public:
   void setcolor(int color){m_color=color;}
};

   ,   :

class CShape{
...
public:
   void setcolor(int color,(CShape*)this){this->m_color=color;}
};

4.虚関数とマルチステート(Polymorphism)
虚関数を使用しない場合:
a.ベースクラスと派生クラスが「同じ名前のメンバー関数」を定義している場合、オブジェクトポインタによってメンバー関数を呼び出す場合、どの関数を呼び出すかは、ポインタが実際に指すオブジェクトのタイプではなく、ポインタの元のタイプによって決まる必要があります.たとえば、ベースクラスのポインタで派生クラスのオブジェクトを指す場合、そのポインタを介してベースクラスで定義された関数のみを呼び出すことができます.
b.「派生クラスのポインタ」で「ベースクラスのオブジェクト」を指す場合は、まず明らかな転換操作(explicit cast)をしなければなりません.このやり方は危険であり,実際の生活経験に合わず,プログラム設計においてもプログラマーを困惑させる.
虚関数があります.
派生クラスのベースクラスポインタを指すことで、派生クラスの同名上書きメンバー関数にアクセスするマルチステート性を実現します.虚関数は、protectedまたはpublicのアクセス権を持つベースクラスの非静的メンバー関数である必要があります.
虚関数の役割は、動的アセンブリを実現することであり、すなわち、プログラムの実行段階で適切なメンバー関数を動的に選択し、虚関数を定義した後、ベースクラスの派生クラスで虚関数を再定義することができ、派生クラスで再定義された関数は虚関数と同じパラメータ数とパラメータタイプを持つべきである.統合されたインタフェース、異なる定義プロセスを実現します.派生クラスで虚関数が再定義されていない場合は、そのベースクラスの虚関数が継承されます.
5.マルチステート(Polymorphism)
多くの場合、ベースクラスでは虚関数に有意義な実装を与えることができず、純粋な虚関数として宣言され、その実装はベースクラスの派生クラスに残される.これが純虚関数の役割です.純粋な虚関数は、クラスに操作内容を持たずに、派生クラスが継承されたときに具体的に定義されるように、クラスに操作名を持たせることができます.純粋な虚関数を含むクラスを抽象クラスと呼ぶ.このクラスはオブジェクトを宣言することはできません.ベースクラスとして派生クラスサービスです.派生クラスでベースクラス内のすべての純粋な虚関数が完全に実装されない限り、派生クラスも抽象クラスになり、オブジェクトをインスタンス化できません.
             ,        :
  class <  >
  {
  virtual <  ><   >(<   >)=0;
  …
  }; 

6.静的メンバー(変数と関数)
staticメンバー変数はオブジェクトではなく、クラスの一部です.まず、オブジェクトが誕生していないときに存在するため、初期化する必要があります.そうしないと、接続エラーが発生します.
staticメンバー関数はオブジェクトを使用して呼び出す必要がないため、コンパイラはthisポインタを暗記することはありません.したがって、staticメンバー関数はクラスのnon-staticメンバー変数を処理できません.