наследование — получение и составление одного и того же класса. Переполнение стека

Что произойдет, если у класса есть отношение has-a с другим классом, а также он получает этот же класс?

class A
{
friend classB;
// here lots of things might be , but i just try to understand how should I think.
};

class B : public A
{
// here again might be couple lines  of codes.

protected:
A d;
};

Что на самом деле здесь происходит? Как я должен думать об этом?

0

Решение

Ничего особенного в этом нет. У вас есть переменная-член class A называется d, и ваш class B также содержит все, что class A содержит, и все, что добавлено к нему.

С первого взгляда я не вижу в этом ничего полезного, но я уверен, что есть обстоятельства, когда это может пригодиться — указатель на объект A имеет больше смысла, так как делает его связанным списком. (или похожие).

1

Другие решения

Рассматривать:

struct Human {};

struct Superhuman : Human
{
Human mentor;
};

Или, возможно, чуть менее прямой пример:

struct Human
{
virtual ~Human() {}
};

struct Girl : Human
{
unique_ptr<Human> ptrToGirlfriendOrBoyfriend;
};

struct Boy : Human
{
unique_ptr<Human> ptrToGirlfriendOrBoyfriend;
};

(Заменить unique_ptr с shared_ptr как необходимо…)

Так что бывают случаи, когда сочинение одного и того же типа используется для наследования делает имеет смысл, хотя я бы предположил, что это довольно редко.

Потерять friend декларация, хотя, если вы действительно, действительно нужно это.

0

Я не понимаю, почему вы захотите использовать «друг» здесь. Утверждая в A, что B — класс друзей, вы говорите, что A доверяет B для доступа к своим закрытым членам. Однако B происходит из A, поэтому, если вы хотите получить доступ к членам в A из B, но не разрешаете доступ к чему-либо еще, тогда эти члены просто должны быть «защищены», а не «частными».

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector