Чтобы добавить еще один пример различия: в 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"
Обратите внимание, что задействован только один класс, но можно использовать почти бесконечное число типов. В некоторых языках функции считаются «первоклассными объектами», и в этом случае тип функции является классом. В других тип функции является просто указателем. Классы, как правило, обладают концепцией способности хранить данные, а также операции с этими данными.