2

これが問題です (おそらく最善の方法ではありません)、呼び出しているクラスへのポインターをパラメーターとして受け取るクラス コンストラクターを呼び出す機能が必要です (うーん!!!)。私が C# で行っているように、コードの方がよく見えます。

public class SomeClass
{
   SomeOtherClass someOtherClass;

   //Constructor
   public SomeClass(SomeOtherClass someOtherClass)
   {
      this->someOtherClass = someOtherClass;
   }
}

public class SomeOtherClass
{

   public SomeOtherMethod()
   {
      SomeClass c = new SomeClass(this);
   }
}

では、C ++で同じ結果を得るにはどうすればよいですか? 事前にサンクス。

4

5 に答える 5

5
class SomeOtherClass;  // forward declaration (needed when used class is not visible)
class SomeClass
{
   SomeOtherClass *someOtherClass;
public:
   SomeClass(SomeOtherClass *some) : someOtherClass(some)
   {}  // this is called initialization at constructor (not assignment)
}

class SomeOtherClass
{
public:
   SomeOtherMethod()
   {
      SomeClass *c = new SomeClass(this);
   }
}

上記の要件に答えたので、C++ ではオブジェクトを常に宣言する必要がないことにも注意してくださいnew。宣言すれば、

SomeOtherClass someOtherClass;

SomeOtherClassという名前のオブジェクトがあることを意味しますsomeOtherClass

于 2011-08-22T07:45:15.007 に答える
2

おそらく最善のことではない

それは悪い考えではないかもしれません。ただし、C++ でポインターを使用するときはいつでも、その使用方法を完全に明確にする必要があります。つまり、どのようなもの (ポインターの型だけでなく、スカラーか配列かなど) が指されているか、どのように使用されるかを明確にする必要があります。指摘されたものはそこに到達し(たとえば、他のオブジェクトの一部として?他の何かを介して?)、すべてがどのようにクリーンアップされるか。new

c ++で同じ結果を得るにはどうすればよいですか?

ほぼ同じですが、もちろん C++ ではnew値によってローカル インスタンスを作成するときに使用されないため (代わりにSomeClass c = SomeClass(this);、またはより単純に を記述しますSomeClass c(this);)、ポインターと値の型を認識する必要があります (したがって、 SomeClass::someOtherClass は現在a SomeOtherClass *、これはコンストラクターで受け入れる型でもあります)。また、初期化リストを使用してデータ メンバーを初期化することも強く検討する必要がありますSomeClass::SomeClass(SomeOtherClass* someOtherClass): someOtherClass(someOtherClass) {}

于 2011-08-22T07:46:17.750 に答える
1

C++ でもほぼ同じことができます。

class B;

class A
{
public:
  A (B * b) : pb (b) { }

private:
  B * pb;
};

class B
{
public:
  B () : a (this) { }

private:
  A a;
};

問題は、それが本当に必要かということです。

于 2011-08-22T07:45:42.247 に答える
0

Maybe like this :)

class SomeOtherClass;

class SomeClass
{
private:
  SomeOtherClass * someOtherClass;
public:
  SomeClass(SomeOtherClass *someOtherClass)
  {
    someOtherClass = someOtherClass;
  }
};
class SomeOtherClass
{
public:
  void SomeOtherMethod()
  {
    SomeClass *c = new SomeClass(this);
  }
};
于 2011-08-22T07:55:17.760 に答える
0

'this' は、const として宣言されたメンバー関数 (メソッド) 内の const へのポインターです。そう:

void f1(X* p);
void f2(const X* p);

class X {
    void m1() {
        f1(this); // OK
        f2(this); // also OK
    }
    void m2() const {
        f2(this); // OK
        f1(this); // error, 'this' is a pointer to const X
    }
};
于 2011-08-22T08:44:46.743 に答える