Разница между вложенным классом и поддержкой производного класса в базовом классе - PullRequest
0 голосов
/ 29 июня 2018

В чем разница между созданием класса P со всеми членами в качестве частного и дружественного класса B, производного от P

class P
{
private:
        int i;
        friend class B;
};

class B: public P
{
public:
        void get()
        {
                cout <<i;
        }
};

int main()
{

        B obj2;
        obj2.get();
        return 0;
}

против

Создание класса внутри класса, чтобы никто не мог использовать скрытый класс (подкласс), было бы легко обслуживать, не беспокоясь о том, чтобы сломать чей-либо другой зависимый код.

В какой ситуации мы выбираем какой дизайн из вышеперечисленных (или любой другой, если таковой имеется)?

Этот вопрос является продолжением раздела комментариев ответа Зачем использовать вложенные классы в C ++?

1 Ответ

0 голосов
/ 29 июня 2018

Не делайте того, что вы предлагаете: его плохой дизайн и вероятность циклических зависимостей. Вместо этого используйте защищенные элементы.

class P
{
protected:
    int i = 42;
};

#include <iostream>

class B : public P
{
public:
    void get()
    {
        std::cout << i << std::endl;
    }
};

int main()
{
    B Bobj;
    Bobj.get();

    std::cin.ignore();
    return 0;
}
...