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. private:
  25. void call(int k) { cout << "call(" << k << ");\n"; }
  26. void call2(int k) { cout << "call2(" << k*2 << ");\n"; }
  27. };
  28.  
  29. Base::Base(A* a, int k) : a(a), k(k) {}
  30. void Base::call() {
  31. a->call(k);
  32. }
  33. void Base::call2() {
  34. a->call2(k);
  35. }
  36.  
  37. int main() {
  38. A a;
  39. Base x = a.lol(3);
  40. a.Base::call();
  41. x.Base::call2();
  42. return 0;
  43. }
Success #stdin #stdout 0s 2896KB
stdin
Standard input is empty
stdout
call(5);
call2(6);