C++ C++;如何在实例之间访问类成员函数

C++ C++;如何在实例之间访问类成员函数,c++,class,C++,Class,是否有方法在成员函数定义中访问特定类实例的成员函数?让我在下面的伪代码中阐明我的意思 谢谢 // A Class called Dog class Dog { public: void eat(); void drink(); //... More code here }; void Dog::eat() { //How do I always access dog1.drink() here, regardless of which instance calls it? } //... Mo

是否有方法在成员函数定义中访问特定类实例的成员函数?让我在下面的伪代码中阐明我的意思

谢谢

// A Class called Dog
class Dog
{
public:
void eat();
void drink();
//... More code here
};

void Dog::eat()
{
//How do I always access dog1.drink() here, regardless of which instance calls it?
}
//... More code here
// Instances of Dog
Dog dog1, dog2;

简言之:有点,这是可能的,但这很奇怪,很复杂,也很奇怪。你想干什么

class Dog {
  static Dog *firstDog_;

public:
  Dog()  { if(firstDog_ == nullptr) firstDog_ = this; }
  ~Dog() { if(firstDog_ == this) firstDog_ = nullptr; }
  void eat();
  void drink();
}

Dog *Dog::firstDog_ = nullptr;

void Dog::eat() {
  if (firstDog_ != nullptr)
    firstDog_->drink();
}
因此,如前所述,第一只狗将是经常喝酒的狗。当第一条狗被消灭时,就没有第一条狗了。下一只被创造出来的狗变成了一只总是喝酒的新狗


但这是WeeeIIirrdddd。别这样

简而言之:有点,这是可能的,但这很奇怪,很复杂,也很奇怪。你想干什么

class Dog {
  static Dog *firstDog_;

public:
  Dog()  { if(firstDog_ == nullptr) firstDog_ = this; }
  ~Dog() { if(firstDog_ == this) firstDog_ = nullptr; }
  void eat();
  void drink();
}

Dog *Dog::firstDog_ = nullptr;

void Dog::eat() {
  if (firstDog_ != nullptr)
    firstDog_->drink();
}
因此,如前所述,第一只狗将是经常喝酒的狗。当第一条狗被消灭时,就没有第一条狗了。下一只被创造出来的狗变成了一只总是喝酒的新狗


但这是WeeeIIirrdddd。别这样

如果你想让
dog1
喝,你只需呼叫:

dog1.drink();
无论您是否在
Dog
的成员函数中编写此函数,都没有区别。这里没有必要想得太多


注意:与全局变量的任何其他用法一样,全局变量必须在使用它的代码之前声明。

如果您想让
dog1
喝,只需调用:

dog1.drink();
无论您是否在
Dog
的成员函数中编写此函数,都没有区别。这里没有必要想得太多


注意:与全局变量的任何其他用法一样,全局变量必须在使用它的代码之前声明。

您是否尝试过
dog1.drink()?(您必须在调用它的函数之前声明
dog1
)。您必须在静态/全局变量中引用该实例。您的dog1似乎是一只特殊的狗,就是在羊群中吃东西的狗。我会重新考虑层次结构。让drink()函数保持静态怎么样?您可以将“other dog”作为构造函数参数传入,并将其存储为成员变量。好的一面是另一只狗是“动态”的,不需要是静态的单态,坏的一面是,无论何时构造一只狗,调用方都必须引用“另一只狗”。这取决于实际的用例,因为这是否比您尝试使用的静态/全局ID要好
dog1.drink()?(您必须在调用它的函数之前声明
dog1
)。您必须在静态/全局变量中引用该实例。您的dog1似乎是一只特殊的狗,就是在羊群中吃东西的狗。我会重新考虑层次结构。让drink()函数保持静态怎么样?您可以将“other dog”作为构造函数参数传入,并将其存储为成员变量。好的一面是另一只狗是“动态”的,不需要是静态的单态,坏的一面是,无论何时构造一只狗,调用方都必须引用“另一只狗”。这取决于实际的使用情况,这是否比仅仅使用静态/全局变量好。不过,我非常喜欢ctor和dtor的对称性。是的,仅仅使用全局变量会更好。不过,我非常喜欢ctor和dtor的对称性。是的,仅仅使用全局变量会更好。