контролирует доступ к другому объекту, перехватывая все вызовы (выполняет функцию контейнера).
class IMath {
public:
virtual double add ( double x, double y ) = 0 ;
virtual double sub (double x, double y ) = 0;
virtual double mul (double x, double y ) = 0;
virtual double div (double x, double y ) = 0;
};
class Math : public IMath {
public:
double add( double x, double y ) {
return x + y ;
}
double sub(double x, double y ) {
return x - y ;
}
double mul (double x, double y ) {
return x * y ;
}
double div(double x, double y ) {
return x / y ;
}
};
class MathProxy : public IMath {
public:
double add( double x, double y ) {
return math. add (x, y ) ;
}
double sub(double x, double y ) {
return math. sub(x, y );
}
double mul (double x, double y ) {
return math. mul (x, y );
}
double div(double x, double y ) {
return math. div(x, y );
}
private :
Math math;
};
#include <iostream>
using std ::cout ;
using std ::endl ;
int main() {
// Create math proxy
MathProxy p ;
// Do the math
cout << "4 + 2 = " << p.add ( 4, 2) << endl ;
cout << "4 - 2 = " << p. sub( 4, 2) << endl ;
cout << "4 * 2 = " << p.mul (4, 2) << endl ;
cout << "4 / 2 = " << p. div(4 , 2) << endl ;
return 0;
}