пятница, 13 августа 2010 г.

Некомпилируется код применением указателя:

Имеется код, приведенный ниже. Почему в случае №1 компилятор не может скомпилировать код, а в случае №2 пусть и громоздко, но все отлично компилируется?


class CUnk {
public:
  void SuperMethod() { std::cout << "CUnk::SuperMethod()" << std::endl; }
};

class CUnkPointer {
public:
  CUnkPointer() : m_UnkPtr(0) {}
  CUnkPointer(CUnk * UnkPtr) : m_UnkPtr(UnkPtr) {}
  ~CUnkPointer()     { if(m_UnkPtr) delete(m_UnkPtr); m_UnkPtr=0;  }
  operator CUnk *()  { return(m_UnkPtr); }
private:
  CUnk * m_UnkPtr;
};

  CUnkPointer UnkPtr( new CUnk);
  UnkPtr->SuperMethod();            // (Случай №1)
  ((CUnk*)UnkPtr)->SuperMethod();   // (Случай №2)

Ответ( http://www.base64.ru/ ):

----
0J/QvtGC0L7QvNGDINGH0YLQviDQsiDRgdC70YPRh9Cw0LUg4oSWMiDRgdGD0YnQtdGB0YLQstGD0LXRgiDQvtC/0LXRgNCw0YLQvtGAINC/0YDQtdC+0LHRgNCw0LfQvtCy0LDQvdC40Y8sINCwINCyINGB0LvRg9GH0LDQtSDihJYxINC90LXRgiDQv9C10YDQtdCz0YDRg9C30LrQuCDQvtC/0LXRgNCw0YLQvtGA0LAgIi0+Ig==
----

Комментариев нет: