1. C++ / Говнокод #14117

    +12

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    #include <iostream>
    
    class base
    {
    	virtual void on_create() { }
    public:
    	int value;
    	float another_value;
    
    	void create()
    	{
    		static base test;
    		if(*reinterpret_cast<unsigned int *>(this) != *reinterpret_cast<unsigned int *>(&test))
    		{
    			std::cout << "please, do not override on_create()\n";
    		}
    		on_create();
    	}
    };
    
    class derived : public base
    {
    	virtual void on_create(){}
    };
    
    int main(int argc, char * argv[])
    {
    	std::cout << "base\n";
    	base b;
    	b.create();
    
    	std::cout << "derived\n";
    	derived d;
    	d.create();
    }

    Родилось в попытке ограничить переопределение виртуального метода.
    Работает, цуко.
    http://ideone.com/gUN9OA

    Запостил: Xom94ok, 20 Ноября 2013

    Комментарии (5) RSS

    • ...и в номинации "самый унылый говнокод" приз уходит... #14117!
      Ответить
    • Но ведь оно не за методом следит, а за изменением VMT? Т.е., по идее, другие методы оно тоже менять не даст :)
      Ответить
      • А при включенном RTTI вообще будет валить наследников ни за что ;)
        Ответить
    • Не читал, плюсанул.
      Ответить
      • показать все, что скрыто— раздался пронзительный голос со стороны параши.

        Но пацаны, как всегда, не обратили внимания на это визгливое кукареканье. Пусть кукарекает, что с него взять?

        Петух — не человек, и сегодня ему предстоит очень трудная ночь. У него уже в течение полутора лет каждая ночь была очень трудной, и теперь его анус был разработан настолько, что он без труда мог спрятать в нём банку сгущёнки.
        Ответить

    Добавить комментарий