C ++クラス内のポインタとオブジェクトクラスとの間の差

1つの#include <iostreamの> 
 2の#include < ストリング > 
 3。 使用した 名前空間STD; 
 4。 クラスの学生 
 5。 { 
 6。 公共7。 静的 INT 数;  
 8。 文字列名; 
 9。 
10  公共11。 学生(){} 
 12は、 空隙 SET文字列STR ) 
 13である { 
 14名= STR; 
 15番号++;     // 静的データメンバを呼び出す
16 } 
 17  
18である ボイドプリント()   // )(状態メンバ関数プリント
。19  { 
 20は、 STD :: COUT <<名<< " :学生ISの数" <<数<< " 番号" << STD :: ENDL; // 呼び出し静的データメンバ
21は } 
 22である }; 
 23である 
24  のint学生番号:: = 0 ;   // 静的データメンバーを初期化
25  
26である INTメイン(int型 ARGC、チャー ** ARGV) 
 27  { 
 28学生*のS1; 
29 S1 = 新しい学生(); 
30 S1-> セット" 111 " )。 
31  
32  学生S2。 
33の S2。セット" 222 " )。 
34  
35 S1-> 印刷(); 
36  s2.print()。 
37  
38  戻り 0 ; 
39 }

クラスの生徒のために、私たちはオブジェクトとポインタを定義します。

ポインタクラス:彼は(割り当てられた変数値の一部のメンバーを含む)メモリ・ストレージでクラスオブジェクトを指す、メモリアドレス値である。
オブジェクト:彼は、メモリ内のメンバ変数の数を含むメモリを(割り当てられたクラスを使用するためのコンストラクタです割り当てられた値)。
際にアプリケーション:
1.基準部材; - 「」演算子を持つオブジェクトポインタ「>」演算子。
2.寿命:メンバ変数、クラスデストラクタが中に放出された場合スペース、機能の一時変数場合、スコープは、身体の機能であり、ポインタ、割り当てられたメモリブロックの解放が行わを使用するための対応の必要性を削除します。
注:新規新を使用し、削除する必要があります。..

Objectクラス:メモリ・スタックを使用して、ローカルの一時変数。
ポインタクラス:あなたはそれを解放しない限り、メモリヒープを使用するには、恒久的な変数です。


:クラスが基底クラスの仮想関数がある場合は、funcが、それは仮想関数、コールのFuncある
オブジェクトクラス:呼び出しは、独自のFuncであり、
ポインタクラス:呼び出しはスペースそのクラスに割り当てられていますFUNC。

アプリケーションとの間の差は、このクラスと何(新しいオペレータによって割り当てられたメモリ)用のオブジェクト・クラスへのポインタを
1クラスとオブジェクトは、2つの異なるもの、クラスのオブジェクトのインスタンスである;
2.オブジェクトがスタックに割り当てられ、新しいの使用生成されたオブジェクトをヒープに割り当てられます。
3.仮想関数に強い役割を果たしていると、ポインタがオブジェクトにアクセスするために使用する必要があります。

ポインタは、オブジェクトに直接ではなく、多形性を達成することができる
スタック空間で実行定義のオブジェクト
に新しいヒープ

タイプの名前を注意してください。
一つは学生である
一つは学生である*
学生のオブジェクトに直接アクセスである
学生は、*ので、メディアのためのポインタを通じて、オブジェクトへの間接アクセスです。
タイプは、あなたが何ができるかを決定します。

実際には、同じ基本的な役割は、使用されるクラスのメンバ変数とメンバ関数を呼び出すことです
あなたはこのクラスを使用してクリアしたいときに、それはあなたが使用したい場合は、オブジェクトを使用するのが最善であるC ++動的バインディング、それはポインタまたは参照を使用するのが最適です
それらをより多くの、柔軟な実装が容易とポリモーフィズムを使用するためのポインタと参照

ポインタクラス:彼は(割り当てられた変数値の一部のメンバーを含む)メモリ・ストレージでクラスオブジェクトを指す、メモリアドレス値である。
オブジェクト、(メンバ変数の数を含むメモリでメモリを割り当てられたクラスを使用するためのコンストラクタです割り当てられた値)。
際にアプリケーション:
1.基準部材; - 「」演算子を持つオブジェクトポインタ「>」演算子。
2.寿命:メンバ変数、クラスデストラクタが中に放出された場合スペース、機能の一時変数ならば、スコープがin vivoでの関数ポインタで、適切な場所で解放削除に割り当てられたメモリブロックを使用する必要があります。
注:...新しい使用を削除してください
クラスの仮想関数がある場合にはベースクラス、FはFときに呼び出される仮想関数である
;:オブジェクト・クラスの呼び出しは、独自のFuncある
ポインタクラスは:コールはクラスそのことのFunc空間に割り当てられています。

クラス宣言の場合は1が完了していない、クラスは声明へのポインタではなく、オブジェクトのクラス宣言することができ...
ポインタがオブジェクトの2.親クラスのサブクラスを指すことができます。..

オブジェクトのインスタンスを定義するときに、メモリを割り当て。ポインタ変数が必要とされる割り当てられていないメモリ・クラス・オブジェクト・
ポインタ変数が間接的にアクセスされるが、マルチ状態とすることができる(親クラス、サブクラスのオブジェクトポインタを呼び出すことによって)、およびコンストラクタを呼び出すことはありません。
直接の文は、直接アクセスすることができますが、多型、コンストラクタ(割り当てられたメモリ)を呼び出し、すなわち声明を達成することはできません。
プロセスの高効率化のためのようなものであってもよいプログラム呼び出しに依存します。

一つは、唯一のポインタまたは参照はポリモーフィズムを実現することができ、C ++における多型の本質です。いいえオブジェクトません

ポインター:
最初の多状態。
第二に、関数呼び出しのパラメータは、ポインタを渡されました。どんなに、あなたが過去に渡されたポインタを、どのように使用するか、あなたのオブジェクトまたは構造パラメータ大4つのバイトではありません。オブジェクトパラメータが大きすぎるのリソース消費を渡す場合

おすすめ

転載: www.cnblogs.com/chaoyingLi/p/11287761.html