Wskaźniki do składowych klasy

0

Mam klasę:

 
class Vertex
	{
	public:
		list<Edge*> Edges; //powiazane krawedzie
		Edge* kr;
		int obiekt;
	};

Wiem że do składowej kr klasy Vertex uzyskuję dostęp przez:

Edge* Vertex::*E;
	E=&Vertex::kr;

Pytanie: jak dostać się do pierwszego elementu składowej list tej samej klasy?
Próbowałem tak:

Edge* Vertex::*P;
P=&Vertex::Edges.front();

co oczywiście nie działa :)

0

A to jest taka zagadka sama dla siebie czy ty chcesz tego używać? Bo jak chcesz tego używać to napisz odpowiedni geter i nie kombinuj ;]

0

Tak, chciałbym to potem użyć - to część funkcji.
Da radę? :)

A proszę jeszcze o wyjaśnienie, cóż to takiego ten "geter"

1

Jest tu na forum raptem kilka osób które potrafiłoby podać ci odpowiednie definicje o które pytasz. Na palcach jednej ręki można policzyć osoby które umiałyby użyć takiego potworka w kodzie ;] Napisz funkcje składową klasy która będzie dawać ci dostęp do tego co potrzebujesz wyciągnąć z wnętrza obiektu. Lekcja na dziś: enkapsulacja. Obiekt klasy to jest czarna skrzynka i NIE WOLNO ci majstrować przy jej wewnętrznej implementacji. Z obiektu wolno korzystać tylko za pomocą odpowiednich metod/funkcji składowych.

0

Zgadzam się z tym co napisano wyżej, tym niemniej podrzucam przykład jak coś takiego można by zrobić (ale nie powinno się tego robić ;) ).

 
struct A { 
	A(int i) : m_i(i) {} 
	int m_i; 
};

struct B { 
	std::list<A*> list_a; 
};

int main() {
	B b;
	b.list_a.push_back(new A(5));
	
	std::list<A*> B::* ptr = &B::list_a; // ładniej - auto ptr = &B::list_a;
	A* a = (b.*ptr).front();
	std::cout << a->m_i << std::endl;
	
	return 0;
}
1

Ja nie rozumiem czemu nie zrobić po ludzku?

class Vertex
  {
   private:
   list<Edge> Edges; //powiazane krawedzie
   int obiekt;
   public:
   void Add(const Edge &e) { Edges.push_back(e); }
   list<Edge>::iterator begin()const { return Edges.begin(); }
   list<Edge>::iterator end()const { return Edges.end(); }
  };

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