Wykonanie operacji na wszystkich obiektach danej klasy?

0

Witam

Jak zrobić jakąś pętlę albo coś żeby wykonywała operację na wszystkich obiektach danej klasy.
dajmy na to jest klasa xxx
i jest 5 obiektów
xxx aaa
xxx sss
xxx ddd
xxx fff
xxx ggg

i każdy powiedzmy ma string nazwa (aaa.nazwa)

Jak zrobić jakąś funkcję czy pętlę żeby dało się zrobić coś takiego

for (???)
{
if (???.nazwa == "coś tam")cout<<"tak";
else{cout<<"nie"}
}

Nie wiem czy to na for, if czy jeszcze czymś innym? Chodzi o to żeby sprawdzić po kolei wszystkie obiekty danej klasy jakimś warunkiem (np. czy nazwa każdego obiektu == coś tam, albo jakaś inna zmienna == ileś tam).

Program pisany w Visual C++ express. Pomoże ktoś?

0

nie możesz zbudować tablicy z tych obiektów?

xxx tab[5]; 
0

Albo wektor wskaznikow do klasy
np:

vector<LPMOJKLASA> vKlasy;

0

nie mogę bo to są podklasy. (nie napisałem)
Główna klasa jest powiedzmy "blabla" i posiada wartości wspólne np. prędkość, coś tam.

a obiekty są tworzone w podklasach które mają inne indywidualne wartości.
Tworząc w tabeli musiałbym stworzyć np. int prędkość[100], żeby móc potem dodać po 20 obiektów z każdej podklasy. Zagmatwałem trochę. Ale po prostu chyba musi to być na oddzielnych obiektach. Każdy klasa ma swoje różne dane i metody. Tabelami bym tylko napieszał.

A z tym vectorem to nie wiem o co chodzi. To do każdego obiektu trzeba jakoś dodawać? Zaraz poczytam o tych vectorach.

0

To moze zaimplementuj jakas metode w kazdej klasie, cos w stylu HaveMethod(nazwa metody) ktora zwroci ci adres zmiennej ktora chcesz zmienic.

a co do wektorow to: http://4programmers.net/Forum/Post/Version/743201

0

Ty z tego co widzę ciągle szukasz sposobu na refleksję w C++. Powiem raz i wbij to sobie do głowy. W C++ nie ma refleksji i nie da się jej uzyskać. Jedyny sposób to zapisywanie gdzieś wskaźników lub referencji do obiektów. Przykładowo możesz zrobić tak:

#include <list>
#include <iostream>

class Base {
public:
  typedef void (*func_each)(Base*);
private:
  typedef std::list<Base*> instances_list;
  static instances_list _SM_instances;
public:
  Base() {
    _SM_instances.push_back(this);
  }
  virtual ~Base() {}
  virtual void my_method() = 0;
  static void each_instance(func_each func) {
    for(instances_list::iterator i = _SM_instances.begin(); i != _SM_instances.end(); ++i)
      func(*i);
  }
};

std::list<Base*> Base::_SM_instances;

class Child1 : public Base {
public:
  void my_method() {
    std::cout << "Child1::my_method()\n";
  }
};

class Child2 : public Base {
public:
  void my_method() {
    std::cout << "Child2::my_method()\n";
  }
};

class Child3 : public Base {
public:
  void my_method() {
    std::cout << "Child3::my_method()\n";
  }
};

class Child4 : public Base {
public:
  int my_method() {
    std::cout << "Child4::my_method()\n";
  }
};

void call_mymethod(Base* b) {
  b->my_method();
}

int main() {
  Child1 a;
  Child2 b;
  Child3 c;
  Child4 d;
  Child1 tab[10];

  Base::each_instance(call_mymethod);
}

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