printОбъекты

printИдентичность

Идентичность (уникальность) – это такое свойство объекта, которое отличает его от всех других объектов.
В большинстве языков программирования для различения объектов используют имя, тем самым путая адресуемость и идентичность. В базах данных различают объекты по набору ключевых полей, тем самым смешивая идентичность и значение данных.
Объект может использоваться в программе под несколькими синонимичными именами. Такая ситуация называется структурной зависимостью и порождает в объектно-ориентированном программировании много проблем. Трудность распознания побочных эффектов при действиях с объектами, имеющими имена-синонимы, часто приводит к "утечкам памяти", неправильному доступу к памяти, и, хуже того, непрогнозируемому изменению состояния.
Объекты в функцию можно передавать по ссылке и по значению. По ссылке передается адрес объекта, что дает возможность изменять переданный объект, реализовать полиморфное поведение и повысить эффективность при работе со сложными объектами. При передаче по значению создается объект-копия, который имеет такое же состояние. Копирование может быть "поверхностным" (копируется только сам объект, а состояние является разделяемым) и "глубоким" (копируется объект и состояние рекурсивно). В С++ конструктор копий по умолчанию копирует объект поэлементно, что приводит к созданию синонимов на составные части (разделению состояния), когда объект содержит ссылки или указатели на другие объекты.
Аналогично, присваивание может быть сделать "глубоким" и "поверхностным".
С вопросом присваивания тесно связан вопрос равенства. Равенство можно понимать двумя способами. Во-первых, два имени могут обозначать один и тот же объект. Во-вторых, это может быть равенство состояний у двух разных объектов. В C++ нет предопределенного операции равенства, поэтому нужно самостоятельно определять операции равенства и неравенства.
Операции присваивания и равенства можно определить как виртуальные, чтобы подклассы могли переопределять их поведение.
loading