Каково различие между Типом и Классом?

136
задан yesraaj 6 January 2010 в 06:30
поделиться

11 ответов

Следующий ответ взят из книги Гофа ( Шаблоны проектирования )

Объекта class определяет, как Объект реализован. Класс определяет внутреннее состояние объекта и реализация его операции.

В отличие от объекта type относится только к его интерфейсу - a набор запросов, на которые он может ответить.

Объект может иметь много типов, и объекты разных классов могут имеют тот же тип.

//example in c++
template<typename T> 
const T & max(T const & a,T const &b)
{
return a>b?a:b;  //> operator of the type is used for comparison
}

Для функции max требуется тип с операцией > со своим собственным типом в качестве одного из интерфейсов. Любой класс, который удовлетворяет вышеуказанному требованию, может использоваться для генерации определенной функции max для этого класса.

112
ответ дан 23 November 2019 в 23:40
поделиться

Интересный вопрос. Я думаю, что ответ aku является пятном на. Возьмите класс java ArrayList в качестве примера

public class ArrayList<E> extends AbstractList<E>
    implements List<E>, RandomAccess, Cloneable, java.io.Serializable

экземпляр ArrayList, класс, как говорят, имеет тип каждого суперкласса, который он расширяет и каждый интерфейс, который он реализует. Поэтому экземпляр ArrayList класс имеет тип ArrayList, RandomAccess, Cloneable и т.д. Другими словами, значения (или экземпляры) принадлежат одному или нескольким типам, классы определяют, каковы эти типы.

0
ответ дан 23 November 2019 в 23:40
поделиться

Тип обычно относится к классификации примитивных значений - целые числа, строки, массивы, булевские переменные, пустой указатель, и т.д. Обычно, Вы не можете создать новые типы.

Класс относится к именованному набору свойств и методов, которые объект связан с тем, когда он создается. Можно обычно определять как многие новые классы, как Вы хотите, хотя некоторые языки необходимо создать новый объект и затем присоединить методы к нему.

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

1
ответ дан 23 November 2019 в 23:40
поделиться

Я думаю о типе, как являющемся набором вещей, которые можно сделать с конкретным значением. Например, если у Вас есть целочисленное значение, можно добавить его к другим целым числам (или выполнить другие арифметические операции), или передайте его функциям, которые принимают целочисленный аргумент. Если у Вас есть объектное значение, можно назвать методы на нем, которые определяются его классом.

, поскольку класс определяет то, что можно сделать с объектами того класса, класс определяет тип. Класс является больше, чем, что, хотя, так как он также предоставляет описание того, как методы реализованы (что-то не подразумеваемое типом) и как поля объекта размечаются.

Примечание также, что объектное значение может только иметь один класс, но это может иметь несколько типов, так как каждый суперкласс обеспечивает подмножество функциональности, доступной в классе объекта.

Поэтому, хотя объекты и типы тесно связаны, они - действительно не то же самое.

1
ответ дан 23 November 2019 в 23:40
поделиться

Типы и классы связаны, но не идентичные. Мое взятие - то, что классы используются для наследования реализации, тогда как типы используются для замены во время выполнения.

Здесь ссылка, объясняя принцип замены и почему подклассы и подтипы являются не всегда тем же самым (в Java, например). Википедия страница на ковариантности и контравариантности имеет больше информации об этом различии.

1
ответ дан 23 November 2019 в 23:40
поделиться

Проиллюстрировать его самый быстрый путь:

Структурой А является Тип, но Структурой не является Класс.

, Как Вы видите, Тип является "абстрактным" термином для не только определения классов, но также и структуры и примитивные типы данных как плавание, интервал, bool.

4
ответ дан 23 November 2019 в 23:40
поделиться

Тип является концептуально надмножеством класса. В более широком смысле класс является одной формой типа.

Тесно связанный с классами интерфейсы, которые могут пчела, рассматриваемая как совершенно особый вид класса - чисто абстрактный. Это также типы.

, Таким образом, "тип" охватывает классы, интерфейсы и в большинстве примитивов языков также. Также платформы как точечно-сетевой CLR имеют типы структуры также.

3
ответ дан 23 November 2019 в 23:40
поделиться

Тип является обобщающим понятием для всех доступных шаблонов объектов или понятий. Класс является одним таким шаблоном объектов. Так тип структуры, Целый тип, Интерфейсный тип и т.д. Это все типы

, Если Вы хотите, можно посмотреть на него этот путь: тип является родительским понятием. Все другие понятия: Класс, Интерфейс, Структура, Целое число и т.д. наследовалось этому concept.i.e, Они - типы

13
ответ дан 23 November 2019 в 23:40
поделиться

Я всегда думаю о 'типе' как об обобщающем понятии для 'классов' и 'примитивов'.

int foo; // Type is int, class is nonexistent.

MyClass foo; // Type is MyClass, class is MyClass

54
ответ дан 23 November 2019 в 23:40
поделиться

Добавить другой пример различия: в C++ у Вас есть типы указателей и ссылочные типы, которые могут относиться к классам, но не являются классами в и себя.

Bar b; // b is of type "class Bar"
Bar *b2 = &b; // b2 is of type "pointer to Class Bar"
Bar &b3 = b; // b3 is of type "reference to Class Bar"
Bar *b4[7]; // b4 is of type "7-element array of pointers to Class Bar"
Bar ***b5; //b5 is of type "pointer to a pointer to a pointer to Class Bar"

Примечание, что только один класс включен, но близкое бесконечное число типов может использоваться. На некоторых языках функцию считают "первыми объектами класса", в этом случае, тип функции является классом. В других тип функции является просто указателем. Классы обычно имеют понятие способности содержать данные, а также операции на тех данных.

2
ответ дан 23 November 2019 в 23:40
поделиться

Тип содержит описание данных (т.е. свойства, операции, и т.д.),

, Класс является определенным типом - это - шаблон для создания экземпляров объекты .

Строго говоря класс является специальным понятием, он может рассматриваться как пакет, содержащий подмножество метаданные описание некоторых аспектов объекта.

, Например, в C# можно найти интерфейсы и классы. Они оба - типы, но интерфейс может только определить некоторый контракт и не может быть инстанцирован в отличие от классов.

Просто разговор класс , специализированный тип раньше инкапсулировал свойства и поведение объекта.

Википедия может дать Вам более полный ответ:

4
ответ дан 23 November 2019 в 23:40
поделиться