Bonjour et merci d'avance

D'aucun aurait-il la bienveillance de m'expliquer cette structure. Je n'ai pas trouvé d'équivalent dans la documentation malgré pas mal de temps passé en recherche.
Particulièrement les lignes 2;3;4 et 8

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
struct brownian : public processus<double>             //ligne 1
{
       brownian(int n, double T=1)                             //ligne 2
                 : processus<double>(pow(2.,n)+1.), n(n), T(T),//ligne 3
                 h(T/pow(2., n)), G(0,h) {};                   //ligne 4
       result_type operator()();                               //ligne 5
       result_type affine();                                   //ligne 6
       friend struct black_scholes;                            //ligne 8
       protected:                                              //ligne 9
       int n;                                                  //ligne 10
       double h, T;                                            //ligne 11
       gaussian G ;                                            //ligne 12
};
Il est fait référence à la structure processus la voici. Une explication sur la commande friend renforcerai mes assises et elles en ont besoin !!!

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
struct processus
{
typedef std::pair<double, T> state;
typedef std::list<state> result_type;
typedef typename result_type::iterator iter;
typedef typename result_type::const_iterator cst_iter;
processus(int size = 0) : value(size) {};
virtual result_type operator()() = 0;
result_type current() const { return value; };
template <typename S>
friend std::ostream& operator<<(std::ostream &o,
const processus<S> &p)
{
  o << 0;
  return o;
}