Classi Amiche e Classi innestate

di il
2 risposte

Classi Amiche e Classi innestate

Buongiorno a tutti, c'è qualcuno che saprebbe e potrebbe spiegarmi, in termini pratici, quando usare una classe amica e quando una classe innestata?

2 Risposte

  • Re: Classi Amiche e Classi innestate

    Una classe amica viene dichiarata con l'accoppiata delle keywords "friend class". La classe designata come "amica" ha accesso a determinati campi o metodi di una determinata classe che sono definiti come private e quindi inaccessibili alle altre classi.
    Può essere utile in alcuni casi sempre stando attenti a non abusarne.
    Ad esempio potrebbe essere utile quando hai un classe Node e una classe LinkedinList che deve accedere ai campi private di Node:
    class Node
    {
    	private:
    	int value;
    	Node *nextNode;
      
     
    	friend class LinkedList; //La classe LinkedList può usare e vedere i campi value e nextNode della classe Node.
    };
    Le classi innestate invece sono classi definite all'interno di un'altra classe. Un esempio di uso è proprio un'alternavita all'esempio che ti ho fatto sopra. Nella fattispecie una classe innestata nell'esempio sopra può essere utile nei casi in cui vuoi nascondere i dettagli implementativi della LinkedList, ad esempio senza rendere noto esplicitamente che usa una classe Node. Rendendo quest'ultima innestata e private viene usata internamente dalla LInkedList e non visibile agli utilizzatori della LinkedList:
    class LinkedList
    {
    	
    	public:
    	void addValue(int val);
    	void removeValue(int val);
    	/* vari altri metodi per gestire la lista */  
      
    	private: //chi usa LinkedList non vede Node
    	class Node //Classe innestata
    		{
    			public: //LinkedinList può usare value e nextNode in quanto public
    			int value;
    			Node *nextNode;
    		};
    	
    	Node head; //testa della lista
    };
    
    Ci sono tanti vari esempi che possono essere fatti, questo penso possa chiarire abbastanza le idee. L'importante è non abusarne ed usarle solo quando c'è effettivamente bisogno.
  • Re: Classi Amiche e Classi innestate

    Grazie mille!
Devi accedere o registrarti per scrivere nel forum
2 risposte