Мене не хвилює використання C ++ як чистої мови OO, якщо є вагомі причини для змішування методів. (Нагадуючи про причини використання GOTO, хоч і економно.)
Я не думав, що мені було багато запропонувати розмову, поки не побачив цього шматочка. Я повинен не погодитися з настроями. OOP - лише одна з парадигм, які можна і потрібно використовувати в C ++. Чесно кажучи, на мою думку, це не одна з найсильніших її особливостей.
З точки зору ОО, я думаю, що C ++ насправді дещо не вистачає. Наприклад, ідея наявності невіртуальних функцій - це галочка проти цього. У мене були аргументи з тими, хто не погоджується зі мною, але невіртуючі члени просто не відповідають парадигмі, наскільки я переживаю. Поліморфізм є ключовим компонентом ОО, і класи з невіртуальними функціями не є поліморфними в сенсі ОО. Отже, як мова OO, я думаю, що C ++ насправді досить слабкий у порівнянні з мовами, такими як Java або Objective-C.
З іншого боку, загальне програмування, C ++ має це досить непогано. Я чув, що вона говорила, що для цього є і кращі мови, але поєднання об'єктів і загальних функцій - це щось досить потужне і виразне. Крім того, це може бути чорт швидко як у програмуванні, так і в часі обробки. Я думаю, що саме в цій області світить C ++, хоча, мабуть, це може бути краще (наприклад, підтримка мови для понять). Хтось, хто думає, що вони повинні дотримуватися парадигми ОО і ставитись до інших за порядком заяви гото про рівні аморальності, насправді не вистачає, не дивлячись на цю парадигму.
Можливість метапрограмування шаблонів також досить вражаюча. Ознайомтеся, наприклад, з бібліотекою Boost.Units. Ця бібліотека забезпечує підтримку типу для розмірних величин. Я широко використав цю бібліотеку в інженерній фірмі, в якій зараз працюю. Він просто забезпечує набагато більш негайний зворотний зв’язок для одного аспекту можливого програміста або навіть помилки специфікації. Неможливо скласти програму, яка використовує формулу, де обидві сторони оператора '=' не є розмірними еквівалентами без явного кастингу. Я особисто не маю досвіду роботи з будь-якою іншою мовою, на якій це можливо, і, звичайно, не з тією, яка також має потужність і швидкість C ++.
Метапрограмування - суто функціональна парадигма.
Так справді, я думаю, ви вже вступаєте в C ++ з якимись прикрими помилками. Інших парадигм, окрім ОО, не слід уникати, вони повинні РІВНЯТИ. Використовуйте природну парадигму для аспекту проблеми, над якою працюєте. Не примушуйте об’єктів до того, що по суті не є проблемою, схильною до об'єктів. Що стосується мене, OO - це навіть не половина історії для C ++.