2012-02-13 10 views
1

に対処:C++ /構文/私は本当に私を混乱させ、このコードにつまずいてきたメンバ関数

SomeObject->SomeFunction()->AnotherFunction(...); 

SomeFunction()メンバ関数への呼び出しに続く第2の矢印->の意味は何ですか?

P.S. SomeFunction()関数はちょうどこのようにクラス内で宣言されています

const int * SomeFunction() {return ipValue;} 
+4

SomeFunctionも 'int'は' AnotherFuntion'メンバ関数を持っていないので、コンパイルはならない – pezcode

+0

をコンパイルしませんint型を返します。 – crashmstr

+1

もう一度チェックすると、SomeFunctionはあるクラスへのポインタを返す必要があります。 – jrok

答えて

3

SomeFunction()は、呼び出されたメソッド(AnotherFunction)の1つを持つクラスへのポインタを返します。既に説明したように、SomeFunction()がint *を返す場合、これは機能しません。

+2

すでに述べたように、SomeFunction()がint *を返す場合、これは動作しません。 – Kaganar

+0

SomeFunction()は 'const int *'を返します。それは質問で指定されています。 –

+0

ありがとうございました!それは私の質問に答えました! –

1

それは意味し、その後、今度AnotherFunction()で呼び出された上のポインタまたはポインタのようなオブジェクトのいくつかの種類を返しますSomeFunction()方法。

これは、->演算子が、式に表示される場所にかかわらず、正確に同じ意味を持つことを意味します。

EDIT

戻り型は、(編集前)intあるので与えられたコードはコンパイルされません。 hereが表示されているように、コンパイラは->へのオペランドに関してポインタではないと不平を言っています。戻り値の型をint *に変更すると、演算子->はクラス型へのポインタに対してのみ呼び出され、intなどの基本型へのポインタに対しては呼び出されないため、コンパイルされません。 Hereは、int *と適切なエラーメッセージを含む例です。

+0

おっと、ちょうど 'SomeFunction()'に与えた戻り値の型に注意してください。その場合、多くのことが間違っています。これはコンパイルされず、戻り値の型の 'const'はコンパイラにとって全く無意味です(ただし、ドキュメントとして使用されることもあります)。 – LiKao

+0

そして、あなたがそれを記述した方法ではコンパイルされないという証拠はここにあります:http://ideone.com/9zCTr – LiKao

+0

なぜこれをdownvotedしましたか? – LiKao

3

これはコンパイルエラーです。

intはクラスではなく基本的な型であるため、メソッドを呼び出すことはできません。

この手法はメソッドチェーンと呼ばれます。メンバ関数がオブジェクトまたはオブジェクトへのポインタを返す場合は、後続のメソッドを呼び出すことができます。あなたのケースでは、メソッドがintを返すのでコンパイルされません。ただし、次のようなものは動作します:

class A 
{ 
public: 
    A* foo(); 
    A* goo(); 
}; 

A* a = new A; 
a->foo()->goo()->foo(); 
関連する問題