2009-12-17 2 views
0

Какова реальная разница между классом и структурой, когда вы имеете дело с объектно-ориентированным программированием. Этот вопрос задают много раз во время моих интервью для SE.Разница между классом и структурой в PHP и Java

Некоторые люди говорят, что существует только одна разница: Элементы структуры являются общедоступными по умолчанию, а члены класса являются закрытыми по умолчанию.

Некоторые говорят, что существует много различий.

После прочтения многих статей и форумов, у меня есть следующие отличия:

Классы DEFAULT к наличию частных пользователей. Структуры DEFAULT для публичных пользователей.

Структуры представляют собой тип значений. Классы являются ссылочным типом.

Структура хранится в памяти через стек. Классы хранятся в памяти через кучу.

Структура не поддерживает наследование. Наследование наследования классов.

Конструктор работает по-разному.

«новый» оператор работает по-разному.

Выделение памяти для структуры происходит очень быстро, поскольку это происходит внутри или в стеке.

Как вы относитесь к моему списку выше, или у вас есть другой. Спасибо

+1

Классы и структуры имеют разные значения на разных языках. Вы должны сказать нам, на каком языке вы ссылаетесь. – Oded

+0

Какой язык, C#? –

+0

Я считаю, вы имеете в виду на C++, но даже там у вас есть некоторые ошибки. –

ответ

2

Это довольно специфичный для языка. Кажется, вы смешиваете справедливую долю как C++, так и C#, оба из которых являются очень разными языками (несмотря на поверхностные сходства в синтаксисе).

В C++ struct s действительно по умолчанию public видимость элемента в то время как class по умолчанию private. В C# struct используется для объявления типов значений, которые передаются по значению (note that the stack allocation is an implementation detail, not a contract).

Вообще оба языка, кажется, имеет ту же самую идею о том, что struct и classдолжны представляют: struct для простых структур данных, которые делают немного больше, чем проведение данных, в то время как классы имеют состояние и методы, чтобы манипулировать им. Они используются для создания объектов в каком-то конкретном или абстрактном смысле, тогда как структуры данных - это именно то, что: данные в структурированной форме; им не нужно много делать с этими данными или даже знать, какие данные есть. По сути, они глупы и не заботятся.

Но именно так языковые дизайнеры думали, что они должны использоваться. Люди хороши в неправильном использовании вещей, поэтому не каждый struct, который вы видите, может быть простой, немой структурой данных, и не каждый class, который вы видите, может быть полномасштабным классом с множеством методов и много чего. Это просто конвенция, и если люди последуют за ней, другие могут посмотреть на код и посмотреть «О, хорошо, это struct, поэтому я не ожидаю здесь много логики и перейду к более интересным вещам». Это может сработать ... теоретически.

ETA: Поскольку вы упомянули в комментариях, что вы особенно заинтересованы в PHP или Java: Оба языка делает не есть какое-либо различие в синтаксическом или языковом уровне class или struct вот почему ваш вопрос мне кажется как немного странно. В Java и PHP вы моделируете вещи как классы, независимо от того, являются ли они просто структурами данных без логических или реальных классов со всем, что есть.

+0

Когда меня спрашивали об этом различии кем-либо во время собеседования, они не зависят от какого-либо языка. Я думал, что это общий вопрос. – NAVEED

+1

NAVEED: Дело в том, что многие языки имеют разные возможности и возможности. Если вопрос был таким же общим, как разница между классом и структурой данных, на самом деле на самом деле не сложно ответить. Но то, что вы указали в своем вопросе, было ярким пятном из функций C++ и C# в отношении ключевых слов 'class' и' struct', поэтому было немного сложно понять, что именно * ваш вопрос.А что касается разных языков, ответ во многом зависит от того, что эти языки. Как указывалось, Java, например, имеет только классы для всего, структуру данных или нет. – Joey

+0

спасибо за ваш ответ. В начале мой вопрос был общим, и мои вопросы в моих вопросах были также общими (что, на мой взгляд, может быть неправильным). Когда пользователи спрашивали об определенном языке, я проявил интерес к PHP и JAVA. Мое мнение может быть неправильным как общее, поэтому я спросил ваши мысли в конце моего вопроса. Это обсуждение действительно увеличивает мои знания. благодаря – NAVEED

1

Это полностью зависит от языка, поэтому не может быть однозначного ответа. Если вас интересует конкретный язык, укажите его в своем вопросе.

+0

Меня интересует PHP/Java – NAVEED

1

С точки зрения ОО, нет никакой разницы. Они оба типа, которые имеют открытый API с методами (и свойствами, если ваш язык поддерживает их).

С технической точки зрения, может быть много различий, но это зависит от языка и/или платформы.

Когда дело доходит до проектирования OO, я просто игнорирую, что такая вещь, как структура существует вообще, поскольку она не дает мне никаких дополнительных возможностей или функций. Когда мы погружаемся глубже в реализацию, класс может оказаться лучше реализован как структура, но это чистая деталь реализации.

0

Разница между структурой и классами

-The Основное различием между классом и структурой является то, что декларация структуры начинается с ключевым словом «STRUCT», тогда как с другой стороны, класс начинается с ключевым словом «класса ». - В классе член данных и член являются закрытыми по умолчанию, тогда как в структуре они являются общедоступными по умолчанию. -Data hiding поддерживается в классах, но не в структуре. -структура имеет дело только с переменными, тогда как объекты имеют дело с объектами реального мира.

-Если мы явно укажем тип доступа для каждого члена, структура будет вести себя точно как как класс.

0

Классы являются ссылочными типами, а структуры - значениями. В отсутствие спецификатора доступа для базового класса public предполагается, когда объявлен производный класс struct и private, если класс объявлен классом.

Смежные вопросы