........
図1に示すように、INT * P =新しいINT(5)、ポインタpに対応するアドレスが5の内部に格納されています。
INT * P =新しいINT [5];不確定値内部の長さ5のダイナミックアレイを適用します。
2、ベクトルは、クラスが、クラステンプレートではありません。
コンストラクタは、基本クラスが初期化される呼び出す場合3は、派生クラスで表示される、パラメータBenQのコンストラクタクラスでプレゼンステーブル、引数なしで、基本クラスのコンストラクタは、もはやコールに派生クラスを表示しない場合デフォルトでは、継承されたシステムデータが初期化されたパラメータなしの基底クラスのコンストラクタを呼び出します。
次のようにシーケンス派生クラスのコンストラクタが実行されます。
彼らは継承時のために1)基底クラスのコンストラクタの実行順序。
2)次に、派生クラスの新しいメンバーは、コール内部クラスの宣言の順序に応じて、オブジェクトを初期化します。
3)最後に、自分のものの内部派生クラスのコンストラクタの実装。
基底クラスが問題を継承するとき、図4に示すように、多重継承のメンバーを区別するスコープオペレータが繰り返されます。
例えば:
クラスA
{
公衆 :
私はint型。
空FUNC();
}。
クラスB
{
公衆 :
私はint型。
空FUNC();
}。
クラスC:公共A、B、公開
{};
CのC、
私は1 :: = CA;
cA ::楽しいです();
または派生クラスで、このような宣言によって:
クラスC:公共A、B、公開
{
Aを使用して::私は、
B ::楽しみを()を使用しました。
}
図5は、仮想基底クラスは多重継承を、この仮想基本クラスのみフォームメモリに格納することができるときに菱形パターン継承されたデータメンバーまたはメンバー関数を解決することです。仮想基本クラスとして4上述したような文字を使用することもできる、それらを区別するために::スコープを使用してもよいです。
クラスA
{
公衆 :
int型;
空の楽しみ();
}。
クラスB:仮想公共A
{};
クラスC:仮想公共A
{};
クラスD:パブリックB、C公共
{};
D dを、
DA = 1;アクセスの仮想ベースクラスのデータメンバ//
d.fun();仮想関数メンバーAの基底クラス//アクセス
図6は、ベースポインタは派生クラスは、ベースクラスオブジェクトに表示ポインタを変換して変換することができるが、派生クラスは、ベースクラスを受け入れるようにしない限り、直接クラスオブジェクト(あるいはその参照型)コンストラクタパラメータに変換することができません。
A;
= static_case <A>()B B。错误。
7、静的結合と動的結合は事前バインディングと遅延バインディング、二つの方法で実現多型に対応しています。
図8に示すように、フロント及び差分パラメータINTの後部++ ++上記有無、無実用的な効果ではなく、フロントとリア++を区別するためにINTをオーバーロードオペレータ++
例えば:
(INT)リアは単項演算子をオーバーロードでき演算子++
オーバーロードされた演算子++()前単項演算子
図9は、上記多型で使用される仮想関数、基本クラスの関数の動作の一部を変更するために添加派生クラスは、その後、派生クラスで修飾し、その後上書きされる基本クラスの仮想関数に関数を置きます。
ほとんどがことが強調されるべきである:長い基底クラスとして、仮想関数呼び出しへのポインタまたは参照を介してのように、結合だけ動的に発生する可能性があり、オブジェクトの基本クラスを介して達成することができません。理由:
ポインタは派生クラスへのオブジェクトの基本クラスを指すことができ、ベースクラスは、別名派生オブジェクトとして引用するが、オブジェクトの基本クラスを表していないオブジェクトは、クラスを派生させることができます。
図10は、いくつかの場合には、基本クラスへのポインタに、派生クラスの下の空間は、クラスオープンリリース由来、仮想コンストラクタを宣言することはできないが、仮想デストラクタを宣言することができます。
図11は、限り純粋仮想関数を持つクラスは、抽象クラスであるように、全ての純粋仮想関数を実装していない場合、派生クラスは、ベースクラス与えられ、このときに属する派生クラスは抽象クラスです。抽象クラスは、オブジェクトが定義されていない場合、インスタンス化できないが、抽象クラスと参照へのポインタを定義することができます。
12、ディープコピー&シャローコピー:クラスのデータメンバがある場合はポインタ型、深いコピーに関連する必要がある、または他のオブジェクトのコンストラクタ呼び出し、ない本当の割り当て、要素だけであれば割り当てになります最初のアドレスの割り当て、およびメモリ二回の同じ部分に、時に割り当てた後、オブジェクトのデストラクタを呼び出すことは避けてください。したがって、手動でコピーコンストラクタを記述する必要があります(オープンスペースの必要性には、リリースのためのスペースを解放し、開かれました)。
あなたがクラスを記述したい場合は、クラスがオブジェクトに定義することができないので13は、実際には、クラスの定義は、個人データのコンストラクタた場合、そのクラスの同等の意味を持たないように継承され、コンストラクタを確認することです、継承することはできませんあなたは、コンストラクタを呼び出すことはできません。しかし、このクラスの定義は問題ありませんが、ありません。
図14に示すように、コンパイル時の多型:構文チェックが過負荷が、この場合、呼び出される関数を決定するために行われるだけでコンパイルされ、その後、プログラムコードは、オブジェクトコードに変換され、オペレーティング・システムが実行していない接続しないように。
ランタイムの多型は:コンパイル後、オペレーティング・システム及びオペレーティング・システムとの接続が実行され、この期間中で行う多型は、マルチステート動作である、書き換え(上書き)は、このようなものです。
15、仮想関数テーブルの多型:
簡単な説明:オブジェクトクラス定義の存在が仮想関数テーブルへのポインタ(すなわち、仮想関数テーブルポインタ)をポイントする各クラスは、仮想関数テーブルを有しているので、オブジェクト・コンバータは、各時間は、それが関数を呼び出すどんなに彼らは同じです。
16、のPeekMessageとのgetMessage違い:
非同期および同期、のPeekMessageとの違いは、メッセージキューがメッセージを持っていることを知って、メッセージがない場合、それは待たなければならないメッセージが直接返されるかどうか、メッセージ・キューから取り出したが、のgetMessageメッセージキューされたときに戻ります。