fork download
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. class A;
  6.  
  7. class Base {
  8. public:
  9. Base(A* a, int k);
  10. void call();
  11. void call2();
  12.  
  13. private:
  14. A* a;
  15. int k;
  16. };
  17.  
  18. class A : public Base {
  19. friend class Base;
  20. public:
  21. A() : Base(this, 5) {}
  22.  
  23. Base lol(int k) { return Base(this, k); }
  24.  
  25. using Base::call;
  26. using Base::call2;
  27.  
  28. private:
  29. void call(int k) { cout << "call(" << k << ");\n"; }
  30. void call2(int k) { cout << "call2(" << k*2 << ");\n"; }
  31. };
  32.  
  33. Base::Base(A* a, int k) : a(a), k(k) {}
  34. void Base::call() {
  35. a->call(k);
  36. }
  37. void Base::call2() {
  38. a->call2(k);
  39. }
  40.  
  41. int main() {
  42. A a;
  43. Base x = a.lol(3);
  44. a.call();
  45. x.call2();
  46. return 0;
  47. }
Success #stdin #stdout 0s 2896KB
stdin
Standard input is empty
stdout
call(5);
call2(6);