C++漏れ補充読書ノート三ポインタと引用、動的バインドと静的バインド
本節ではダイナミックバインドについてお話ししたいと思いますが、その結果、このポインタと引用の違いも復習する必要があることがわかりました
動的バインドと静的バインド
静的バインド:コンパイル時にバインドされ、オブジェクトによって呼び出されます.
動的バインド:実行時にバインドされ、アドレスによって実現されます.虚関数のみに有効です.
したがって、上記の定義は、ポインタと参照が虚関数を呼び出してこそ動的バインドが実現され、残りは静的バインドに属することを発見することができる.
以下、コードで説明します.
C++の多態性
静的マルチステート:関数マルチステート-関数リロード
テンプレートの多態性——C++テンプレート(クラステンプレート、関数テンプレート)
動的多様性:仮想関数(アドレスのみで動的多様性を実現)は、動的バインドに等価です.
ポインタと参照
引用とは?
参照もアドレスですが、このアドレスは変更できません.
宣言を参照するときは初期値を割り当て、その後は変更できません.
参照の形式:
int a;
int& b=a;
int& c=b;//リファレンスは、ポインタと同様にリファレンスを初期化できます.
参照の主な機能:
関数のパラメータと戻り値を返します.C++言語では,関数のパラメータと戻り値の伝達方式は,値伝達,ポインタ伝達,参照伝達の3つである.
ポインタと参照の違い:
2.参照使用時に参照を解く必要はありません(*)、ポインタは参照を解く必要があります.
3.参照は宣言時に一度だけ初期化され、その後は可変ではない.ポインタが可変です.
4.const参照はconstオブジェクトのみを指し、非const参照は非constオブジェクトのみを指す.
5.参照は空ではなく、ポインタは空であってもよい.
6.「sizeof参照」は、指向する変数(オブジェクト)の大きさであり、「sizeofポインタ」は、ポインタ自体(指向する変数またはオブジェクトのアドレス)の大きさである.
typeid(T)==typeid(T&)は真、sizeof(T)==sizeof(T&)は真、
ただし、メンバーとして参照する場合、ポインタと同じスペースが使用されます(標準の規定は見つかりません).
7.ポインタと参照の自己増加(++)演算の意味が異なる
ポインタの++演算は配列の次のアドレスを指し、参照する++はそのオブジェクトの特定のタイプに応じて関係します.
符号化におけるポインタと参照の取捨選択に関する観点:
Move Effiective C++第一条
ポインタの使用:
一、何も指向しない可能性を考慮する
二つ目は、あなたが異なる時点で異なるオブジェクトを指していることです.
常に1つのオブジェクトを指し、一度指すオブジェクトが変更されない場合は、リファレンスを使用します.
オブジェクトを指向し、指向を変更したくないことを知っている場合、オペレータを再ロードし、不要な意味の誤解を防ぐ場合、
ポインタを使うべきではありません.それ以外の場合はポインタを使うべきです
C++デザイン哲学は「ポインタ」の代わりに「引用」を使うことであり、「引用」が使えるときは「ポインタ」を使わない.
実際、「リファレンス」は現代のコンパイルアーキテクチャの下で実装されている「ポインタ」ですが、そのタイプのセキュリティはコンパイラによって改善されています.例えば、「空のポインタ」を参照することができますが、「空のリファレンス」を使用するとコンパイラが通過しないので、リファレンスを使用すると安全で便利です.
マルチステートについては,ポインタのみが実現できると考える人が多く,その実用的な引用も正しいと考えられているが,まだ分からないなら『Inside The C++Object Model』を見てみる
実は私の観点では、ポインタは柔軟で、参照は安全で、やはり異なる需要によってそれらを使用しますが、私もポインタを使用する必要がないときに参照を使用することに賛成します.
読んでくれてありがとう
動的バインドと静的バインド
静的バインド:コンパイル時にバインドされ、オブジェクトによって呼び出されます.
動的バインド:実行時にバインドされ、アドレスによって実現されます.虚関数のみに有効です.
したがって、上記の定義は、ポインタと参照が虚関数を呼び出してこそ動的バインドが実現され、残りは静的バインドに属することを発見することができる.
以下、コードで説明します.
class CBase
{
public:
virtual int func() const //
{
cout<func(); // : ( CDerive) func
p2.func(); // : ( CDerive) func
obj2.func(); // : ( CBase )
p2.CBase::func(); // :
}
C++の多態性
静的マルチステート:関数マルチステート-関数リロード
テンプレートの多態性——C++テンプレート(クラステンプレート、関数テンプレート)
動的多様性:仮想関数(アドレスのみで動的多様性を実現)は、動的バインドに等価です.
ポインタと参照
引用とは?
参照もアドレスですが、このアドレスは変更できません.
宣言を参照するときは初期値を割り当て、その後は変更できません.
参照の形式:
int a;
int& b=a;
int& c=b;//リファレンスは、ポインタと同様にリファレンスを初期化できます.
参照の主な機能:
関数のパラメータと戻り値を返します.C++言語では,関数のパラメータと戻り値の伝達方式は,値伝達,ポインタ伝達,参照伝達の3つである.
ポインタと参照の違い:
2.参照使用時に参照を解く必要はありません(*)、ポインタは参照を解く必要があります.
3.参照は宣言時に一度だけ初期化され、その後は可変ではない.ポインタが可変です.
4.const参照はconstオブジェクトのみを指し、非const参照は非constオブジェクトのみを指す.
5.参照は空ではなく、ポインタは空であってもよい.
6.「sizeof参照」は、指向する変数(オブジェクト)の大きさであり、「sizeofポインタ」は、ポインタ自体(指向する変数またはオブジェクトのアドレス)の大きさである.
typeid(T)==typeid(T&)は真、sizeof(T)==sizeof(T&)は真、
ただし、メンバーとして参照する場合、ポインタと同じスペースが使用されます(標準の規定は見つかりません).
7.ポインタと参照の自己増加(++)演算の意味が異なる
ポインタの++演算は配列の次のアドレスを指し、参照する++はそのオブジェクトの特定のタイプに応じて関係します.
符号化におけるポインタと参照の取捨選択に関する観点:
Move Effiective C++第一条
ポインタの使用:
一、何も指向しない可能性を考慮する
二つ目は、あなたが異なる時点で異なるオブジェクトを指していることです.
常に1つのオブジェクトを指し、一度指すオブジェクトが変更されない場合は、リファレンスを使用します.
オブジェクトを指向し、指向を変更したくないことを知っている場合、オペレータを再ロードし、不要な意味の誤解を防ぐ場合、
ポインタを使うべきではありません.それ以外の場合はポインタを使うべきです
C++デザイン哲学は「ポインタ」の代わりに「引用」を使うことであり、「引用」が使えるときは「ポインタ」を使わない.
実際、「リファレンス」は現代のコンパイルアーキテクチャの下で実装されている「ポインタ」ですが、そのタイプのセキュリティはコンパイラによって改善されています.例えば、「空のポインタ」を参照することができますが、「空のリファレンス」を使用するとコンパイラが通過しないので、リファレンスを使用すると安全で便利です.
マルチステートについては,ポインタのみが実現できると考える人が多く,その実用的な引用も正しいと考えられているが,まだ分からないなら『Inside The C++Object Model』を見てみる
実は私の観点では、ポインタは柔軟で、参照は安全で、やはり異なる需要によってそれらを使用しますが、私もポインタを使用する必要がないときに参照を使用することに賛成します.
読んでくれてありがとう