Back to notes -- Keyboard shortcut: 'u'        next -- Keyboard shortcut: 'n'  Slide program -- Keyboard shortcut: 't'    Class A provides friendship to class B.Lecture 3 - slide 30 : 36
Program 1
// Class B is a friend of class A, such that methods in
// class B can access private variables in class A.
// It is important that class A is defined before class B,
// because the details of class A are needed in mb.

#include <iostream>
#include <string>

class B;   // forward declaration, B is an incomplete class

class A{
private:
  double a;

public:
  friend class B;         // B must be known here!
  A(double a):a(a){}

  void ma(){
    a += 3.0;
  }

  void print(){
    std::cout << a << std::endl;
  }
};

class B{
private:
  double b;

public:
  B(double b):b(b){}

  void mb(A &x){
    b += x.a;             // x.a is OK because class B is a friend of A 
  }

  void print(){
    std::cout << b << std::endl;
  }
};



int main(){
  A aObj(1);
  B bObj(2);

  aObj.ma();
  bObj.mb(aObj);

  aObj.print();  // 4
  bObj.print();  // 6
}