に対処:C++ /構文/私は本当に私を混乱させ、このコードにつまずいてきたメンバ関数
SomeObject->SomeFunction()->AnotherFunction(...);
SomeFunction()
メンバ関数への呼び出しに続く第2の矢印->
の意味は何ですか?
P.S. SomeFunction()
関数はちょうどこのようにクラス内で宣言されています
const int * SomeFunction() {return ipValue;}
に対処:C++ /構文/私は本当に私を混乱させ、このコードにつまずいてきたメンバ関数
SomeObject->SomeFunction()->AnotherFunction(...);
SomeFunction()
メンバ関数への呼び出しに続く第2の矢印->
の意味は何ですか?
P.S. SomeFunction()
関数はちょうどこのようにクラス内で宣言されています
const int * SomeFunction() {return ipValue;}
SomeFunction()
は、呼び出されたメソッド(AnotherFunction
)の1つを持つクラスへのポインタを返します。既に説明したように、SomeFunction()がint *を返す場合、これは機能しません。
すでに述べたように、SomeFunction()がint *を返す場合、これは動作しません。 – Kaganar
SomeFunction()は 'const int *'を返します。それは質問で指定されています。 –
ありがとうございました!それは私の質問に答えました! –
それは意味し、その後、今度AnotherFunction()
で呼び出された上のポインタまたはポインタのようなオブジェクトのいくつかの種類を返しますSomeFunction()
方法。
これは、->
演算子が、式に表示される場所にかかわらず、正確に同じ意味を持つことを意味します。
EDIT:
戻り型は、(編集前)int
あるので与えられたコードはコンパイルされません。 hereが表示されているように、コンパイラは->
へのオペランドに関してポインタではないと不平を言っています。戻り値の型をint *
に変更すると、演算子->
はクラス型へのポインタに対してのみ呼び出され、intなどの基本型へのポインタに対しては呼び出されないため、コンパイルされません。 Hereは、int *
と適切なエラーメッセージを含む例です。
これはコンパイルエラーです。
int
はクラスではなく基本的な型であるため、メソッドを呼び出すことはできません。
この手法はメソッドチェーンと呼ばれます。メンバ関数がオブジェクトまたはオブジェクトへのポインタを返す場合は、後続のメソッドを呼び出すことができます。あなたのケースでは、メソッドがint
を返すのでコンパイルされません。ただし、次のようなものは動作します:
class A
{
public:
A* foo();
A* goo();
};
A* a = new A;
a->foo()->goo()->foo();
SomeFunctionも 'int'は' AnotherFuntion'メンバ関数を持っていないので、コンパイルはならない – pezcode
をコンパイルしませんint型を返します。 – crashmstr
もう一度チェックすると、SomeFunctionはあるクラスへのポインタを返す必要があります。 – jrok