Ответы пользователя по тегу ООП
  • Как выводить объекты шаблона класса с разными типами с перегруженным оператором вывода?

    0hquazEd
    @0hquazEd
    template<class U, int Size> убери и всё заработает
    Ответ написан
    Комментировать
  • Что здесь полиморфизм?

    0hquazEd
    @0hquazEd
    1. Да, весь прикол в виртуальных методах и свойствах.
    2. Полиморфизм - аспект языка, позволяющий менять поведение программы во время её исполнения или не пилить миллионы классов. Это позволяет легко наращивать функционал.

    В этом примере поведение объекта исменилось за пару строк кода(с использованием smart pointers это было бы красивее).
    class IDoter
    {
    public:
    
    	virtual void psyche() = 0;
    };
    
    class Newbie_doter : public IDoter
    {
    public:
    
    	void psyche() override
    	{
    		std::cout << "I've been played dota for only a week, I love the world!" << std::endl;
    	}
    };
    
    class Expert_doter : public IDoter
    {
    public:
    
    	void psyche() override
    	{
    		std::cout << "I'm a deadinside" << std::endl;
    	}
    };
    
    int main(int argc, char** argv)
    {
    	IDoter* doter = new Newbie_doter;
    
    	doter->psyche();
    	delete doter;
    
    	doter = new Expert_doter;
    	doter->psyche();
    
    	delete doter;
    	return 0;
    }

    Вывод:
    I've been played dota for only a week, I love the world!
    I'm a deadinside


    Допустим у тебя есть игра типо варфейса. Есть юнит и у него специализация(штурмовик, медик, снайпер и т.д). У тебя есть класс Map в котором есть массив всех юнитов на карте. Попробуй заполнить массив специализациями, которые НЕ наследуются от абстрактного класса. Либо ты будешь писать десятки версий класса(при каждом добавлении новой специализации ты будешь писать десятки, сотни таких вариаций), либо сделаешь абстрактный класс Unit от которого будут наследоваться специализации и при добавлении новой будет тебе останется написать пару строк кода.

    Можешь так-же посмотреть здесь
    Ответ написан