Guest User

Untitled

a guest
Mar 22nd, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.04 KB | None | 0 0
  1. class Base
  2. {
  3. public:
  4. int base_int;
  5. };
  6.  
  7. class Derived : public Base
  8. {
  9. public:
  10. int derived_int;
  11. };
  12.  
  13. Base* basepointer = new Derived();
  14. basepointer-> //Access derived_int here, is it possible? If so, then how?
  15.  
  16. Derived* derivedpointer = new Derived;
  17. derivedpointer->base_int; // You can access this just fine
  18.  
  19. Base* basepointer = new Derived;
  20. static_cast<Derived*>(basepointer)->derived_int; // Can now access, because we have a derived pointer
  21.  
  22. class Derived : public Base
  23.  
  24. class Base
  25. {
  26. protected:
  27. virtual int &GetInt()
  28. {
  29. //Die horribly
  30. }
  31.  
  32. public:
  33. int base_int;
  34. };
  35.  
  36. class Derived : Base
  37. {
  38. int &GetInt()
  39. {
  40. return derived_int;
  41. }
  42. public:
  43. int derived_int
  44. };
  45.  
  46. basepointer->GetInt() = 0;
  47.  
  48. template<typename DerivedT>
  49. class Base
  50. {
  51. public:
  52. int accessDerivedField()
  53. {
  54. auto derived = static_cast<DerivedT*>(this);
  55. return derived->field;
  56. }
  57. };
  58.  
  59.  
  60. class Derived : public Base<Derived>
  61. {
  62. public:
  63. int field;
  64. };
  65.  
  66. int main()
  67. {
  68. auto obj = new Derived;
  69. obj->accessDerivedField();
  70. }
Add Comment
Please, Sign In to add comment