fork download
  1. #include <cstddef>
  2. #include <iostream>
  3.  
  4. struct ICell
  5. {
  6. virtual bool isEmtpy() = 0;
  7. };
  8.  
  9. class MyCell : public ICell
  10. {
  11. int value;
  12. public:
  13. MyCell() :value(0)
  14. {
  15. }
  16.  
  17. virtual bool isEmtpy()
  18. {
  19. return value == 0;
  20. }
  21. };
  22.  
  23. void foo(ICell *cells, size_t sz)
  24. {
  25. std::cout << "Base address " << &cells[1] << std::endl;
  26. std::cout << "Derived address " << &((MyCell*)cells)[1] << std::endl;
  27. // cells[1].isEmtpy(); //Access violation
  28. ((MyCell*)cells)[1].isEmtpy();
  29. }
  30.  
  31. int main()
  32. {
  33. MyCell *myCells = new MyCell[10];
  34. foo(myCells, 10);
  35. delete[] myCells;
  36.  
  37. return 0;
  38. }
Success #stdin #stdout 0s 3460KB
stdin
Standard input is empty
stdout
Base address 0x8165a14
Derived address 0x8165a18