将自己的实例 class 传递给另一个实例

Passing instance of own class to another

假设我有这些 classes(问号标记我需要在此处传递的问题):

class A
{
  ...
  public:
  void pass()
  {
     B ins;
     ins.doSth(?????);
  }
};

class B
{
  ...
  public:
  void doSth(const A &sth)
  {
    ...
  }
}

int main()
{
  A te;
  te.pass();
}

你能传递一个你自己的实例 class 还是这只是我这边失败的 class 结构的一个例子?

成员函数中的当前对象是*this。您可以将其传递给另一个函数。

考虑class如何相互依赖,而那个class不能使用另一个class直到申报完成。

虽然这会起作用:

class A
{
  //...
  public:
  void pass();
};

class B
{
  //...
  public:
  void doSth(const A &sth)
  {
    //...
  }
};


// Here both classes are completely declared

void A::pass()
{
   B ins;
   ins.doSth(*this);
}


int main()
{
  A te;
  te.pass();
}

您的 class "contains" 是彼此的实例,因此您将面临未声明类型的错误。要解决此问题,您需要使用前向声明。

你还会遇到另一个问题:

如果您的方法 doSth()pass() 是内联定义的,那么您将面临一个问题:"using incomplete types"。解决方法是在 class 之外实现这些方法,以便每个对象在使用前都已完全构建。

程序可能如下所示:

class A;
class B;

class A{
  public:
    void pass();
};

class B{
  public:
      void doSth(const A &sth){
  }
};

void A::pass(){
    B ins;
    ins.doSth(*this);
}

int main(){
  A te;
  te.pass();

  return 0;
}