вопрос по контейнерам
От: Аноним  
Дата: 21.06.08 10:27
Оценка:
Предположим есть некие классы —
class A
{};
class B
{
private:
vector<A> vec_;
};
class C
{
private:
vector<B> vec_;
};

Вопрос в том как правильно организовать итнерфейс например для модификации объекта класса A через класс С, не раскрывая доступ к private членам.
Выставление не константного итератора в классе C, делать бы не хотелось, а выставление константного приведет к тому, что весь интерфейс класса A и B придется продублировать в классе С.
Re: вопрос по контейнерам
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 21.06.08 18:09
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Вопрос в том как правильно организовать итнерфейс например для модификации объекта класса A через класс С, не раскрывая доступ к private членам.


Ну только оксюморонить не надо. Ты хочешь модифицировать приватный член не предоставляя к нему доступ.

А>Выставление не константного итератора в классе C, делать бы не хотелось, а выставление константного приведет к тому, что весь интерфейс класса A и B придется продублировать в классе С.


Что-то глубоковато для непосредственной модификации A через С.

Ну если уж очень хочется, то можно что-то вроде такого:

class A
{};
class B
{
  public:
    void do_something(AKey akey, SomeData params)
    {
      // Поиск объекта A по ключу akey, результат - в переменной pA
      pA->... // что-то делаем
    }
   private:
     vector<A> vec_;
};
class C
{
  public:
    void do_something(BKey bkey, AKey akey, SomeData params)
    {
      // поиск объекта B по ключу bkey, результат - в переменной pB
      pB->do_something(akey, params)
    }
   private:
     vector<B> vec_;
};


BKey и AKey могут быть и индексами, и ещё чем угодно, пригодным для идентификации объекта в наборе.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re: вопрос по контейнерам
От: dandy  
Дата: 30.06.08 05:51
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Предположим есть некие классы -

А>class A
А>{};
А>class B
А>{
А> private:
А> vector<A> vec_;
А>};
А>class C
А>{
А> private:
А> vector<B> vec_;
А>};

А>Вопрос в том как правильно организовать итнерфейс например для модификации объекта класса A через класс С, не раскрывая доступ к private членам.

А>Выставление не константного итератора в классе C, делать бы не хотелось, а выставление константного приведет к тому, что весь интерфейс класса A и B придется продублировать в классе С

int C::Get_B_ObjCount();
int C::Get_A_ObjCount(int i);
void C::SetValue(int i, int j, A a);
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.