Konstruktor wypisujący komunikat na rzecz jakiego obiektu został wywołany.

0

Witam, pytanie jak w temacie. Jak zrobić taki komunikat?

2
struct Hello{
    Hello(){
        cout << "New Hello at: " << this << endl;
    }
};
0
spartanPAGE napisał(a):
class Hello{
    Hello(){
        cout << "New Hello at: " << this << endl;
    }
};

Zwraca adres obiektu a nie jego nazwę. *this i &this też nie działa. Jakieś inne sugestie?

0

Zdefiniuj nazwę obiektu.

0

Jeśli dobrze pojmuję Twój problem, to chcesz dla takiego wywołania:

Foo foo;

otrzymać na ostream "foo", więc nazwę obiektu. Jedyne co możesz w takiej sytuacji zrobić to przechowywać w klasie dodatkowe pole przechowywujące nazwę danego obiektu.

 
class Foo {
  public:
    explicit Foo(const std::string& myName) : m_myName(myName) {
      std::cout << "Constructor for " << m_myName << std::endl;
    }

    ~Foo() {
      std::cout << "Destructor for "<< m_myName << std::endl;
    }

  private:
    std::string m_myName;
};

int main() {
  Foo foo("foo");
  
  {
     Foo bar("bar");
  }
  
  return 0;
}

Mimo wszystko nie wiem po co Ci ta wiedza. Jeśli szukasz gdzieś wycieków to dodaj statyczne liczniki obiektów.

0

"... to przechowywać w klasie dodatkowe pole przechowywujące nazwę danego obiektu..."

Dzięki wielkie, o to właśnie chodziło;) Dziwię się teraz, że na to nie wpadłem, myślałem że da się to jakoś sprytnie inaczej zrobić, ale tak też powinno być ok.

"Mimo wszystko nie wiem po co Ci ta wiedza"

Prowadzącemu zajęcia ta wiedza jest potrzebna;)
Pozdrawiam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1