Czy często używacie klas zagnieżdżonych?

0

Czy często używacie klas zagnieżdżonych ? Jakoś nie wyobrażam żebym tego używał.

0

To się przydaje raczej dość rzadko, ja używam np. wtedy gdy potrzebuję klasy opisującej argumenty albo wyniki jakiejś metody prywatnej.

0

Na dłuższą metę nie powinny występować w kodzie praktycznie w ogóle - nikt nie lubi tłustych klas, przez które trzeba długo scrollować :-P
Ale do szybkich snippetów czy proof-of-concept się przydają.

1

Typowym przykładem klasy zagnieżdżonej w C++ są iteratory kontenerów z biblioteki standardowej. Jaka z tego korzyść? Np taka, że gdyby je tworzyć na zewnątrz każdy musiałby się nazywać inaczej a tak nie musi, bo jest w przestrzeni nazw klasy kontenera (mówię tu o samej nazwie klasy iteratora). Poza tym jego istnienie na zewnątrz ma średni sens, tzn. iterator nie ma sensu jako osobny byt bo jest nierozerwalnie związany z kontenerem po którym iteruje.

To właśnie jest główne zastosowanie. Klasa zagnieżdżona nie powinna mieć sensu jako osobny twór, tzn. mogący istnieć bez i obok jej klasy nadrzędnej. Klasa nadrzędna wprowadza też kontekst dla nazwy klasy zagnieżdżonej przez co jej nazwa może być krótsza i być tak sama jak wewenątrz innych klas (np. jak w przypadku iteratorów). Jest to więc głównie kwestia organizacji i czytelności kodu.

0

co prawda nie w c++, ale tak.
dosyc czesto podczas implementacji klasy pakuje powiazane skladowe/metody w klase wewnetrzna o dosyc ogolnej nazwie, zwykle w pewnym momencie zostaje ona wyciagnieta na zewnatrz (gdy jest zbyt duza i/lub na tyle generyczna ze moze byc wykorzystana gdzie indziej).

0

innym przykładem mogą być struktury pomocnicze pisane na użytek algorytmów, czy zwiększenia czytelności kodu

void f(T arg, T1 arg1, T2 arg2, T3 arg3, T4 arg4, itd...);

vs 

struct Ts
{
    T arg;
    T1 arg1;
    itd...
};

void f(Ts args);
0
class list {
private:
    class node {
    ...
    };
};

No i wspomniane już iteratory. Oprócz tego nie używałem takiej konstrukcji za wiele.

1 użytkowników online, w tym zalogowanych: 0, gości: 1