fork(1) download
  1. #include <iostream>
  2. using namespace std;
  3. class A
  4. {
  5. public:
  6. virtual int Test(int) { cout << "A::Test:" << this << endl; return 9487; };
  7. virtual int Same() = 0;
  8. virtual ~A() {}
  9. };
  10. class B
  11. {
  12. public:
  13. virtual int Test(float) { cout << "B::Test:" << this << endl; return 94.87f; };
  14. virtual int Same() = 0;
  15. virtual ~B() {}
  16. };
  17. class C : public A, public B
  18. {
  19. public:
  20. virtual int Test(int) override { cout << "C::Test int:" << this << endl; return 9487; }
  21. virtual int Test(float) override { cout << "C::Test float: " << this << endl; return 1.1f; }
  22. int Same() override { cout << this << endl; return 5566; }
  23.  
  24. };
  25. int main() {
  26. C* ptr = new C;
  27. cout << "((A*)ptr):" << ((A*)ptr) << endl;
  28. cout << "((B*)ptr):" << ((B*)ptr) << endl;
  29. ptr->A::Test(1);
  30. ptr->B::Test(2.2f);
  31. ((A*)ptr)->Test(1);
  32. ((B*)ptr)->Test(2.2f);
  33.  
  34. void* ptrA = ((A*)ptr);
  35. void* ptrB = ((B*)ptr);
  36. ((A*)ptrA)->Test(1);
  37. ((B*)ptrB)->Test(2.2f);
  38. ((B*)ptrA)->Test(2.2f);
  39. ((A*)ptrA)->Same();
  40. ((B*)ptrB)->Same();
  41. ((B*)ptrA)->Same();
  42. ptr->Same();
  43. return 0;
  44. }
Success #stdin #stdout 0s 15240KB
stdin
Standard input is empty
stdout
((A*)ptr):0x2ae1d348ac20
((B*)ptr):0x2ae1d348ac28
A::Test:0x2ae1d348ac20
B::Test:0x2ae1d348ac28
C::Test int:0x2ae1d348ac20
C::Test float: 0x2ae1d348ac20
C::Test int:0x2ae1d348ac20
C::Test float: 0x2ae1d348ac20
C::Test int:0x2ae1d348ac20
0x2ae1d348ac20
0x2ae1d348ac20
0x2ae1d348ac20
0x2ae1d348ac20