Доступ к вложенному внутреннему классу во внешний класс - PullRequest
0 голосов
/ 03 мая 2020
  • У меня есть вложенный класс , которому необходимо манипулировать элементами данных своего внешнего класса .
  • Я требую, чтобы внешний класс not имеет пустой конструктор.
  • Следующая версия прекрасно компилируется
  • Есть ли способ избежать использования Outer *o внутри Inner и использования Outer o?
class Outer {
private:
    class Inner {
    private: Outer *o;
    public:
        Inner(Outer *outer):o(outer){}
        void visit() { o->d=65; }
    };
private:
    int d;
    Inner v;
public:
    Outer(int m):d(m),v(this){}
};

int main(int argc, char **argv)
{
    Outer out(16);
    return 0;
}

Ответы [ 2 ]

2 голосов
/ 03 мая 2020

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

class Outer {
private:
    class Inner{
    private:
        Outer& o;
    public:
        Inner(Outer& outer) :o(outer) {}
        void visit() { o.d = 65; }
    };
private:
    int d;
    Inner v;
public:
    Outer(int m) :d(m), v(*this) {}
};

int main(int argc, char **argv)
{
    Outer out(16);
    return 0;
}
1 голос
/ 03 мая 2020

Если предположить:

  • класс A имеет переменную-член class B b;
  • класс B имеет переменную-член class A a;

Тогда размер A и B бесконечен.

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