0

Java には、メソッドが「this()」参照を介して自分自身を呼び出すことを可能にする構造があります。この大会の名前は、今のところ思い浮かびません。 編集:以下で指摘されているように、コンストラクター委任として知られています。私が間違えたように、一般的なメソッドではなく、コンストラクターでのみ機能します。

C++ はすべてのポインターの良さを備えており、それ自体への参照を提供しますが、具体的にはそれ自体ではありませんか?

たとえば、複数のオーバーロードなどを持つ関数があります。

void DoesSomething(){
    this->(default1, default2);
}

void DoesSomething(int myValue1){
    this->(myValue1, default2);
}

void DoesSomething(int myValue1, int myValue2){
    //Do stuff
}
4

3 に答える 3

2

関数名を明示的に指定する必要があります。

void DoesSomething(){
    this->DoesSomething(default1, default2);
}

void DoesSomething(int myValue1){
    this->DoesSomething(myValue1, default2);
}

void DoesSomething(int myValue1, int myValue2){
    //Do stuff
}

あなたが説明しているように、文脈によって与えられた名前を持つ他の関数の暗黙の知識はありません。

Java では、これはコンストラクターに対してのみ機能し、コンストラクター チェーンと呼ばれることに注意ください。一般的なメソッドではこれを処理しません。

C++11 では、この同じ概念のサポートも追加されていますが (委譲コンストラクターとして)、構文は Java、C#、およびこの概念を持つ他の言語とは異なります。

コンストラクターの場合、C++11 では次のように記述できます。

SomeType() : SomeType(42) {}

SomeType(int arg)
{
   // ...
于 2013-06-03T16:47:19.900 に答える
1

そのコードを次のように変更する必要があります。

void DoesSomething(){
    this->DoesSomething(default1, default2);
}

void DoesSomething(int myValue1){
    this->DoesSomething(myValue1, default2);
}

void DoesSomething(int myValue1, int myValue2){
    //Do stuff
}

または

void DoesSomething(){
    DoesSomething(default1, default2);
}

void DoesSomething(int myValue1){
    DoesSomething(myValue1, default2);
}

void DoesSomething(int myValue1, int myValue2){
    //Do stuff
}

「これ」は、コードで明示的に記述する必要がないためです。C++ に存在するのは、ここで説明されているような関数オブジェクトと呼ばれるものです: http://www.cprogramming.com/tutorial/functors-function-objects-in-c++.html

于 2013-06-03T16:47:28.150 に答える
0

thisメンバー関数が呼び出されたオブジェクトを指します。関数がそれ自体への参照を返す必要がある場合に最もよく使用されるのを見てきましたoperator()=。この演算子をオーバーロードすると、自己割り当てを防ぐために次のようなものも表示されることがよくあります

foo& foo::operator=(const foo& rhs ){
  if (  this != &rhs ) { 
      //do something
  }
  return *this;
}

これはあなたの質問に答えると思いますか??

参照: http://msdn.microsoft.com/en-us/library/y0dddwwd.aspx

于 2013-06-03T16:49:46.650 に答える