ООП має склад і заміну.
C ++ має багаторазове успадкування, спеціалізацію шаблонів, вбудовування та семантику значення / переміщення / покажчика.
Java має єдине успадкування та інтерфейси, вбудовувальну та довідкову семантику.
Загальний спосіб, коли школа ООП використовує ці мови, - це успадкування для заміни об'єктів та вбудовування для композиції. Але вам також потрібен спільний пращур і спосіб виконання часу (у C ++ називається dynamic_cast
, у Java просто запитують інтерфейс у іншого).
Java робить це все за власною java.lang.Object
вкоріненою ієрахією. У C ++ немає заздалегідь заданого загального кореня, тому вам слід принаймні визначити його, щоб дійти до тієї ж "картинки" (але це обмежує деякі можливості C ++ ...).
Після цього, можливість поліморфізму компіляції в часі (подумайте на CRTP) та значення семантики може запропонувати також інші альтернативи способу перенесення поняття "OOP-об'єкт" у програму C ++.
Можна навіть уявити єресі використовувати вбудоване та неявне перетворення для управління заміщенням та приватним успадкуванням для управління композицією, фактично перетворюючи традиційну шкільну парадигму. (Звичайно, цей шлях на 20 років молодший за інші, тому не сподівайтесь на широку підтримку громадськості у цьому)
Або ви можете уявити собі віртуальну загальну базу для всіх класів, інтерфейс форми (без реалізації) для остаточних класів (повністю реалізований), що проходить через частково реалізовані інтерфейси і навіть кластерні інтерфейси, використовуючи "домінування" як передачу від інтерфейсу до реалізацій через "багатоскладований -паралелограма »схема успадкування.
Порівнюючи OOP з java з C ++, припускаючи, що існує лише один і єдиний спосіб OOP - обмеження можливостей обох мов.
Примушення C ++ суворо дотримуватися ідіомів кодування Java - це денатурація C ++, оскільки змушує Java поводитись як C ++ - подібна мова денатуює Java.
Це не питання "чутливості", а різних "механізмів агрегації" у двох мовах і по-різному поєднувати їх, що робить одну ідіому вигіднішою в одній мові, ніж іншу, і навпаки.