このポインタは、C ++クラスの説明です

この記事では、暗黙のthisポインタの概念を説明し、どのように使用するには、constが含まれています

最初の直接のクラスにC ++入門を与えている、あなたは完全には理解できないかもしれないが、心配しないで、我々は、説明の少しを持っています

クラスSALES_DATA { 
    スタンダード::文字列ISBN()constは{戻りbookNo。} 
    SALES_DATA&組み合わせる(CONST SALES_DATA&)。
    ダブルavg_price()constは、
    std ::文字列bookNo。
    0 =未署名untis_sold。
    ダブル収入= 0.0; 
}。
// SALES_DATA非成员函数接口
SALES_DATAた(const SALES_DATA、constのSALES_DATA&)を追加します。
std :: ostreamに&プリント(STD :: ostreamに&、constのSALES_DATA&); 
std ::はistream&読む(STD ::はistream&、constのSALES_DATA&);

クラスのすべてのメンバーは、クラス内で宣言されなければならないが、関数のボディのメンバーが外部で定義することができ、我々はSALES_DATAクラスの上に書かれているような、ISBN機能は、内部で定義された組み合わせとavg_price機能が外部で定義されています

クラス定義の内部関数は、暗黙的インライン関数

インライン関数、それはつまり、機能を開始するために、時に呼び出し「インライン」ですが、ない機構を介して関数呼び出しを通じて、あなたが呼び出すときに、関数本体を直接呼び出しに、例えば、達成するために次の呼び出し

インラインのconst文字列&
coutの<<短い(S1、S2)<<てendl; 
COUT << {s1.size()<s2.size?S1:S2} << ENDL。

「この」コンセプト#

我々は、機能ISBNを見て

std ::文字列ISBN()constは{bookNoを返します。}

引数リストは空で、どのようにそれはから文字列でオブジェクトの種類が分からない、文字列オブジェクトを返しますか?

この

コールの例を見てください

total.isbn()

私たちは、メンバ関数は、オブジェクト(ここでは合計)(bookNo)の、ISBNメンバーSALES_DATAポイント、それを呼び出すために実際には呼び出すと、それは暗黙のうちにポイント関数呼び出しのオブジェクトのメンバー

total.isbn()の呼び出しでは、ISBNリターンbookNoは、実際には、それは暗黙的にtotal.bookNoを返します

ISBNメンバ関数と、そのオブジェクトを呼び出すには、この訪問をという名前の追加の暗黙のパラメータによって(これは実際には現在のオブジェクトポインタを指している)、私たちはメンバ関数を呼び出すとき、これをオブジェクトのアドレスを初期化するために、この機能を使用し、これは、現在のオブジェクトを指しています

例えば)(total.isbn呼び出し、コンパイラは形式で書き換えることになるコンパイラを呼び出す同等であると理解することができる。このISBN暗黙パラメータに総送信アドレスの原因であります

std ::文字列ISBN()constは{戻りthis-> bookNo}

この点の目的は、常に「この」オブジェクトであるため、そう、これは一定のポインタである(トップレベルのconstで、このポインタ自体は一定です)

ISBN()constは#

まず、あなたがこの記事を読むことをお勧めしますどのように上部と下部のconst違いcosnt constの、の基本的な使い方を知っている必要があり、次のコード行は、あなたがトップcosntをリコールすることができます

0 = I値int、
int型のconst * = P1&I; // P1自体が一定で、最上層のconst 
のconst intは= 42がCIであり; // CI自体は一定であり、上層のconst 
のconst int型*&P2 = CI; * CONST //後、 p2が根底にあるのconstへの一定のポインタである
のconstのconst int型* P2 = P3; //、右下はP3が指し定数ポインタでは一定であり、見た目で左上に見える
のconst int型&R = CI; // const参照文を底CONSTあり、rは一定の基準であります

まあ話題に

constのは「ISBNアクション()constは:結論についての話暗黙のthisポインタの種類の変更

まず、我々はISBN、忘れてデフォルトの下に、この型はクラス型を指す定数ポインタの量の非常バージョン(トップレベルのconstで、このポインタは、彼らが一定であるということですが、それが指すオブジェクトは一定ではない)、SALES_DATAでメンバ関数は、こののデフォルトのタイプはSALES_DATA *のconstのです

これは暗黙のですが、また、初期設定のルールに従うことが、これはデフォルトで、我々は、オブジェクトに直接一定のバインドでこれを置くことはできませんが、また、constオブジェクト上で通常のメンバ関数を呼び出すことはできません(これを使用する必要があります)

具体的に、これは普通のポインタである、ISBNは通常の関数の場合はCONSTされていない、私が意味する場合は、場合には、このの意義の範囲内ISBNが(ちょうどbookNoを返す)件名を変更しません、我々はにこの文を置く必要がありますCONST SALES_DATA *のCONSTので、これは次のように設定されている一定のポインタをポイント柔軟性を向上させます

しかし、この暗黙のは、パラメータリストには表示されませんので、どここの定数ポインタはそれを言って声明を指すのだろうか?C ++のアプローチは、我々はISBN(何を参照してください、パラメータリストのメンバ関数にconstキーワードを許可するようにされた後)constは、このことを示すために、すぐにパラメータのconstポインタのリストの後に、この時間は、使用のような、一定であり、 constメンバ関数はしばしば言及されているconstメンバ関数

//次のコードは病気である、唯一の暗黙的にこのポインタを使用する方法を説明するために、私たちは、明示的にこのポインタを定義することはできません
//ここでこのことを覚えているISBNコードが一定のメンバーであるので、定数へのポインタである
STD ISBN SALES_DATA ::文字列::(CONST CONST * SALES_DATA本){ 
    this-> ISBNを返します; 
}

このオブジェクト#を返すように関数を定義

我々はSALES_DATA内組み合わせる関数を宣言する前に

SALES_DATA&コンバイン(のconst SALES_DATA&);

今、私たちは外に関数を定義します

SALES_DATA&SALES_DATA ::組み合わせる(CONST SALES_DATA&RHS){ 
    untis_sold + = rhs.untis_sold。
    収入+ = rhs.revenue。
    *これを返します。
}

スコープの説明を使用するようにオペレータを組み合わせSALES_DATA :::私たちは、関数が結合すると呼ばれる定義、および関数宣言の役割SALES_DATAの美術の授業なので、untis_sold組み合わせて収益を使用した場合、暗黙的SALES_DATAを使用していますメンバー

私たちは、コンバイン、これを呼び出します

total.combine(トランス)

総アドレスは、暗黙のthisパラメータにバインドされ、そしてトランスRHSにバインドされています

あなたは、この関数は戻り値の型とreturn文という懸念でなければならないことに気づくはずです

できるだけ均一に、結合しなければならないため、本来、戻り値の左オペランドとして+ =、+ =、左側可能オペレータな限り模倣するように設計されたコンバイン参照タイプを返す(この場合、左のオペランドがSALES_DATAオブジェクトである、戻り型をSALES_DATA&)など

どのようにそれを返すために、そして今、私たちは、発信者の特定のメンバ関数にアクセスするには、暗黙のthisポインタを使用する必要はありませんが、全体のアクセスなどのオブジェクトの機能を呼び出す必要があります

*これを返します。

関数のオブジェクトの実行を与えるためにreturnステートメントを間接参照このポインタは、total.combine(トランス)の合計に対する参照を返します

おすすめ

転載: www.linuxidc.com/Linux/2019-09/160779.htm