fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. class ITestA
  5. {
  6. public:
  7. virtual void methodA() = 0;
  8. };
  9.  
  10. class ITestB : public ITestA
  11. {
  12. public:
  13. virtual void methodB() = 0;
  14. };
  15.  
  16. template <class T>
  17. class CBaseAImpl : public T
  18. {
  19. public:
  20. virtual void methodA() override
  21. {
  22. cout <<"A";
  23. }
  24. };
  25.  
  26.  
  27. template <class T>
  28. class CBaseBImpl : public CBaseAImpl<T>
  29. {
  30. public:
  31. virtual void methodB() override
  32. {
  33. cout <<"B";
  34. }
  35. };
  36.  
  37. typedef CBaseAImpl<ITestA> CBaseA;
  38. typedef CBaseBImpl<ITestB> CBaseB;
  39.  
  40. int main() {
  41. CBaseB b;
  42. b.methodA();
  43. b.methodB();
  44.  
  45. ITestA* a =&b;
  46. a->methodA();
  47.  
  48. ITestB *bp = &b;
  49. bp->methodA();
  50. bp->methodB();
  51.  
  52. return 0;
  53. }
Success #stdin #stdout 0s 4304KB
stdin
Standard input is empty
stdout
ABAAB