前回のレッスンの文をまだ覚えていますか?「クラスはオブジェクトの抽象化および一般化であり、オブジェクトはクラスの具体性およびインスタンスです。」クラスの定義を学習したら、次のステップはオブジェクトを作成して使用することです。
1. オブジェクトの作成:
クラスは関数を含む構造体であり、これを使用してオブジェクトである変数を定義します。これは、いわゆる「オブジェクトがクラスのインスタンスであるとき」です。このクラスの が定義されると、オブジェクトをインスタンス化するとも言えます。それが意味します。
オブジェクトの使用は、主に内部のメンバーにアクセスするのと同じで、次のような を使用してアクセスします。
StudentA;A.num=101;strcpy(A.name,dotcpp);A.score=100;A.print();
ここでのクラスのメンバー変数はすべてパブリック型として宣言されていることに注意してください。プライベート型として宣言されている場合、主にmain 関数内のオブジェクトや変数を介して直接アクセスされた場合にエラーが報告されなくなります。その理由は、プライベート型変数がプライベート型であり、外部アクセスを許可しないためです。
保護したいが制御したいプライベート変数については、通常、プライベート型として宣言し、同時にパブリック型の特別な代入メソッドを定義します。プライベートに宣言された変数には内部メンバーがアクセスできるため、これを使用できます。カプセル化と保護の効果を実現するために、これらのプライベート メンバーを間接的に制御する外部の public メソッド。この public 型メソッドは、このクラスの外部インターフェイスとも呼ばれます。この文を理解してください!
2. オブジェクトへのポインタ:
通常の変数と同様、オブジェクトも連続したメモリ空間であるため、オブジェクトへのポインタ、つまりオブジェクト ポインタを作成して、オブジェクトのアドレスを格納することもできます。
作成方法は一般的な型ポインタを使用するのと同様で、定義方法は次のとおりです。
クラス名 * ポインタ名;
たとえば、 Student *p を定義します。 Clock 型のポインタ p を定義します。ここではオブジェクトが作成されず、当然コンストラクタも呼び出されません。次に、同じ型のクラス オブジェクトのアドレスをこのポインターに割り当て、-> を通じてオブジェクト内のメンバーにアクセスできます。
コードは次のとおりです。
Student*p;StudentA;p=&A;p->print();
上記は、値の割り当てやメンバーへのアクセス時にオブジェクト ポインターを使用する方法に加えて、パラメーターを渡すときにもポインターを使用することをお勧めします。ポインターはアドレスを渡し、オブジェクト間の割り当てをコピーしないため、メモリのオーバーヘッドが軽減されます。そして効率を向上させます。
3. オブジェクト参照:
参照は、C++ の新しい型です。オブジェクト参照は、本質的に、クラス オブジェクトのアドレスが参照型に割り当てられます。では、用途をどのように定義すればよいのでしょうか?以下にそれを見せてください。
学生A;学生&Aq=A;
上記のコードに示すように、Student 型のオブジェクトを定義し、次に & を使用してこの型の参照型を定義し、初期化として A オブジェクトを Aq に割り当てます。
注意すべき点は次のとおりです。
1. ポインタと同様、参照するには両方とも同じ型である必要があります。
2. 関数の戻り値または仮パラメータを使用しない限り、他の参照型も同時に初期化する必要があります。
3. 参照型は新しいオブジェクトを作成しないため、コンストラクターは呼び出されません。
したがって、これはクラス オブジェクトのエイリアスであるため、使用方法はクラス オブジェクトと同じで、次のようにalias.memberメソッドを使用してアクセスします。
StudentA;Student&Aq=A;Aq.print();
ご覧のとおり、参照型を使用する場合、本質は依然として格納されたアドレスであるため、パラメーターの定義に関係なく、メモリのオーバーヘッドがあまり発生しないという利点もあります。関数の引数を作成するときは、アドレス文字を追加せずに参照オブジェクトを直接渡すだけなので、より直感的で便利です。これが参照型の利点です。