что такое контейнеровоз или вложенность в C ++? - PullRequest
3 голосов
/ 13 мая 2011

что я понял: Контейнерное хранилище: класс содержит объекты другого класса в качестве данных члена.

объясните, пожалуйста, с примером.

Спасибо.

Ответы [ 4 ]

6 голосов
/ 13 мая 2011

Вложение класса - это просто определение класса в другом классе, например:

class A
{
public:
   class B 
   {
   public:
       class C{};
   };

};

Затем вы можете получить доступ к вложенному классу, используя оператор области действия, как вы бы сделали с пространствами имен:

A a;
A::B b;
A::B::C c;

Теперь, когда класс содержит объект другого класса , это совокупность :

class D
{
public:

   A myA;

   void do_something();

private:
   A::B myB;

};

Тогда вы можете получить доступ к члену, если он общедоступен:

D d;
process( d.myA ); // access to myA

Если он недоступен, вы можете предоставить его с помощью функции. В любом случае, внутри функций класса вы можете получить прямой доступ к члену:

void D::do_something()
{
    doit( myB );
    // or
    doit( this->myB );
}
3 голосов
/ 13 мая 2011

Контейнеровоз просто означает, что к объекту можно обратиться внутри другого.

Например:

class Contained
{
    int foo;
};

class Container
{
    Contained bar;
};

Вы можете получить доступ к foo следующим образом:

Container c;
c.bar.foo = 42;

Класс вложенности отличается.Это означает, что вы объявляете класс из другого:

class AngryMammoth
{
    class CrazyVulture
    {
        int legCount;
    };

    int numberOfPeopleKilledSoFar;
};
2 голосов
/ 13 мая 2011
class In {};
class Out {
  In object;
};
0 голосов
/ 13 мая 2011

Подобно наследованию, объект class A внедрен в объект class B:

class A {
  int x;
};
class B {
  int y;
  A a1;
  A a2;
};

Если вы создадите экземпляр B b, вы получите что-то вроде этого в вашей памяти:

int y; // b.y
int x; // b.a1.x
int x; // b.a2.x

В отличие от атрибута указателя, вложенный объект фактически находится внутри внешнего объекта. Также вам не нужно беспокоиться о создании / удалении A, как это происходит автоматически при создании / удалении B.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...