Back to slide -- Keyboard shortcut: 'u'        next -- Keyboard shortcut: 'n'          nested-classes/nested-1-f15-reorg.cpp - Class Outer that contains class Inner - does not compile.Lecture 5 - slide 12 : 40
Program 1

// Inspirred from page 851-852 of "The C++ Programming Language", 3ed version.
// Intended to show that instances of an inner class does not have access to private members
// in instances of an outer class (as described in "The C++ Programming Language"). 
// Does not compile. 

#include <iostream>
#include <string>

class Outer{
private:
  typedef int T;             // Type T and int i are private in Outer
  int i;
public:
  int i2;
  static int s;

  class Inner{
  private:
    int x;
    T y;                     // OK - Access to types in enclosing class, such as T, is allowed.
  public:
    void fi(Outer *op, int v){
      op->i = v;             // OK - Access to private members in enclosing class via an object (here *op).
                             // A nested class has access to members of its enclosing class, even to private members 
                             // (via a pointer to instance of the enclosing class).

      op->i2 = v;            // OK - i2 is public.
    }

  };  // End of Inner

  int fo(Inner* ip){
    ip->fi(this,2);          // OK - Inner::fi is public
    return ip->x;            // error: Inner::x is private. 
                             // From Outer we cannot access private members in a nested class 
                             // (via a pointer to an instance of the nested class).
  }
};

int main(){
  Outer o;  
  Outer::Inner i;

  i.fi(&o, 5);
  o.fo(&i);
}