fork(2) download
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. using namespace std;
  5.  
  6. class IA {
  7. public:
  8. virtual int calcA() = 0;
  9. };
  10.  
  11. class IB: virtual public IA {
  12. public:
  13. virtual int calcB() = 0;
  14. };
  15.  
  16. class CalcA_Impl : virtual public IA {
  17. public:
  18. virtual int calcA() { cout << "default calcA()\n"; return 0; }
  19. };
  20.  
  21. class A : public CalcA_Impl {};
  22. class B : public IB, public CalcA_Impl {
  23. public:
  24. using CalcA_Impl::calcA;
  25. //virtual int calcA() { return CalcA_Impl::calcA(); }
  26. virtual int calcB() { cout << "B::calcB()\n"; return 0; }
  27. };
  28.  
  29. int main() {
  30. vector<IA*> v;
  31. v.push_back (new A);
  32. v.push_back (new B);
  33. for_each (v.begin(), v.end(), [](IA* ia) {
  34. ia->calcA();
  35. IB *b = dynamic_cast<IB*>(ia);
  36. if (b) {
  37. b->calcB();
  38. }
  39. });
  40. }
Success #stdin #stdout 0s 3476KB
stdin
Standard input is empty
stdout
default calcA()
default calcA()
B::calcB()