C++8種類の一般的なクラスタイプ

3147 ワード

C++8種類の一般的なクラスタイプ
前言
ほとんどのオブジェクト向け開発作業では、1、特定のクラス(concrete class)2、抽象クラス(abstract class)3、インタフェースクラス(interface class)4、ノードクラス(node class)5、サポートクラス(support class)6、ドメインクラス(domain class)7、アプリケーションクラス(utility class)8、集合クラスとコンテナクラス(collection and container class)これらのクラスは、特定の言語構造ではなく、論理クラスを実現するための技術である.
クラスタイプ
説明
特定のクラス
独立クラス;祖先-子孫の世系が終了した終わりを表すクラス
抽象クラス
すべてのサブクラスにレイアウトと青写真のベースクラスを提供し、このようなオブジェクトを宣言することはできません.抽象的な基本的な虚関数を宣言するために、新しいクラスを派生する必要があります.
インタフェースクラス
別のクラスインタフェースを修正または強化するために使用され、オブジェクト向けコードとデータではなく、オブジェクト向けを提供し、独立した関数をカプセル化するために使用されます.
ノードクラス
継承と多態の基礎を提供した.純虚関数を含まない
ドメインクラス
指定したドメイン内のクラスのシミュレーションの一部を作成する現実またはエンティティ
サポート/適用クラス
どのドメインにおいても、異なるアプリケーションに非常に役立ちます.
コレクションとコンテナクラス
その他のオブジェクトグループの一般的なアクセプタ
特定のクラス
具体的なクラスは終了クラスとして設計され実現され,祖先−子孫世系の終了を示すため,関連クラスの一般的なシステムには適しておらず,各具体的なクラスは他のクラスを参照する必要がなく単独で理解できる.派生クラスの機能性を単に心配する必要がないため、特定のクラスはその実装で最適化することができる.したがって,具体的なクラスはスレッド処理におけるマルチスレッドクラスの理想的な候補であり,オンライン化の際,派生クラスに現れる上書きや重要なスレッド化メンバー関数の再ロードを考慮する必要はない.
抽象クラス
抽象クラスはすべての子孫に青写真を提供するクラスであるため、実際には抽象クラスはただの青写真にすぎず、ユーザーも抽象クラスのオブジェクトを宣言することはできません.抽象クラスを使用するためには、ユーザーはまずベースクラスから新しいクラスを派生させ、抽象クラスで宣言されたすべての純虚関数に実際の定義を提供しなければなりません.デフォルトでは、抽象クラスは少なくとも1つの子孫が必要で、機能することができます.また,1つのクラスを抽象クラスにするためには,少なくとも1つの純虚関数が必要である.
class A{
public:
     virtual void lock(void)=0;
     virtual void unlock(void)=0;
 virtual ~A(void);
}

クラスBはクラスAから派生する.
class B:public A{
protected:
    pthread_,mutex_t x;
public:
B(void);
~B(void);
virtual void lock(void) {pthread_mutex_lock(x);}
virtual void unlock(void) {pthread_mutex_unlock(x);}
}

抽象クラスは直接宣言できません:A MemoryLock;//不正B MemoryLock;//合法的
インタフェースクラス
クラスユーザーが使用可能なデータメンバーとメンバー関数は、クラスのインタフェースを構成します.C++は、クラスに対して3つのアクセスポリシーがあります.1、プライベート(private)2、保護(protected)3、パブリック(public)
そのうち:1、データメンバーとメンバー関数がプライベートである場合、それらは中間クラスのメンバー関数にのみアクセスでき、そのクラス以外のメンバー関数にはアクセスできない.2、クラスのメンバー関数とデータメンバーが保護されている場合、それらはクラスの中間メンバーとクラスのすべての子孫によってアクセスできますが、クラス以外の関数はアクセスできません3、クラスはメンバー関数とデータメンバーを公有と宣言することができ、どのクラスのメンバーでもpublicとして定義されたインタフェースとメンバーにアクセスできます
たとえば、次のように、機密関数または変数を保護できます.
class mutex{
protected;
    pthread_mutex_lock x;
public:
    lock() {pthread_mutex_lock(&x);}
    unlock() {pthread_mutex_unlock(&x);}
};

ノードクラス
ノードクラスは継承と多態の基礎であり、抽象クラスと同様にノードクラスは継承に使用されるように設計されているが、異なるのは、ノードクラスには純粋な抽象関数が含まれておらず、直接使用できることである.ノードクラスには、派生クラスによって直接継承される保護されたデータメンバーとメンバー関数が用意されています.ベースクラスのポインタを使用すると、子孫クラスでメンバー関数を操作でき、ユーザーはマルチステートと継承によってノードクラスを特殊化できます.ノードクラスは、ベースクラスであっても派生クラスであってもよい.
ドメインクラス
ドメインクラスは、指定されたドメイン内のエンティティをシミュレートするために作成されたクラスであり、クラスの意味はドメインに固有である.
サポート/適用クラス
このクラスはドメインとは無関係で、日付クラス、時間クラス、計量クラスなど、異なるアプリケーションで非常に役立ちます.
コレクションとコンテナクラス
このクラスは主に他のクラスまたはオブジェクトのアクセプタオブジェクトとして機能します.
コンテナクラス
を選択します.
Stack
List
Queue
Associative Array
Deque
Graph
Set
Tree
Multiset
Table
集合とコンテナクラスを実現する2つの方法:1、オブジェクトベースのルート;2、テンプレートルートに基づく;
ここで、オブジェクト構造に基づいて多状態と継承に非常に依存し、高度な縦方向の集合とコンテナ構造を生成する.テンプレートベースの構造はC++のテンプレート構造の一般的な機能に非常に依存し、集合と容器クラスの横構造を生成する.