Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //////////////////////////////////////////////////////////////////////////
- // VIRTUAL INHERITANCE
- class MostBase
- {
- public:
- virtual ~MostBase() {}
- };
- class X : virtual public MostBase
- {};
- class Y : virtual public MostBase
- {};
- class MostDerived : public X, public Y
- {
- private:
- std::string _str;
- public:
- MostDerived()
- : _str("Helolo!")
- {}
- std::string foo() { return _str; }
- };
- int main()
- {
- MostBase * pB = new MostDerived;
- MostDerived * pD_sc = static_cast<MostDerived*>(pB); // ошибка комплияции
- MostDerived * pD_rc = reinterpret_cast<MostDerived*>(pB); // pD_rc теперь указывает на начало *pB
- // при виртуальном наследовании объекты размещаются в памяти так: X, Y, MostDerived, MostBase
- cout << pD_rc->foo() << endl; // undefined behavior, скорее всего возникнет ошибка доступа к памяти во времени исполнения
- MostDerived * pD_dc= dynamic_cast<MostDerived*>(pB); //ok
- cout << pDr->foo() << endl; // ok
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement