Back to slide -- Keyboard shortcut: 'u'  previous -- Keyboard shortcut: 'p'  next -- Keyboard shortcut: 'n'          nested-classes/nested-2-f14.cpp - Class Outer that contains class Inner - friends of each other.Lecture 5 - slide 12 : 40
Program 2

// The starting point reproduced from page 851-852 of "The C++ Programming Language", 3ed version.
// With friendship between Outer and Inner classes.
// Solves visibility problems from earlier version of the program.  Compiles.

#include <iostream>
#include <string>

class Outer{
private:
  typedef int T;
  int i;
public:
  int i2;                                   
  static int s;

  class Inner{
    friend class Outer;                     // Outer is a friend of Inner
  private:
    int x;
    T y;
  public:
    void fi(Outer *p, int v);
  };

  int fo(Inner* p);
};

void Outer::Inner::fi(Outer *op, int v){
  op->i = v;                                // i is still visible via op
  op->i2 = v;                               
}

int Outer::fo(Inner* ip){
  ip->fi(this,2);
  return ip->x;                             //  Now x in Inner is visible
}                                           //    - because Outer is a friend of Inner
                                            
int main(){
  Outer o;  
  Outer::Inner i;

  i.fi(&o, 5);
}