Рассмотрим первоначальную идею C ++ (или, когда это была просто идея «C с классами»), идею ОО-ориентированного языка, который был совместим с C до такой степени, что большинство допустимых программ на C также были действительными C ++ программы.
C ++ создал свою модель класса, начав с C's struct
и добавив некоторые дополнительные функции:
- Наследование (хотя вы можете приблизиться к C, имея первый член структуры, от которой вы хотите "наследовать").
- Скрытие информации (через
public
, private
и т. Д.)
- Методы-члены (которые изначально были преобразованы макросами в код C вне структуры с добавленным параметром
this
- многие реализации по-прежнему похожи на практике).
В этот момент возникли две проблемы. Во-первых, доступ по умолчанию должен быть общедоступным, поскольку в C нет скрытия информации, и поэтому с точки зрения C ++ все открыто. Для хорошего ОО следует по умолчанию частное. Это было решено добавлением class
, который в значительной степени идентичен struct
, за исключением того, что по умолчанию используется private
вместо public
.
С другой стороны, эта перспектива OO должна иметь timeval
или любой другой класс / структуру в том же «основании», что и int
или char
, а не постоянно помечаться в коде как особые. Это было решено путем ослабления правила о том, что необходимо поместить struct
(или class
) перед именем типа в объявлении переменной этого типа. Следовательно, struct timeval tv
может стать timeval tv
.
Это затем повлияло на более поздние ОО-языки С-синтаксиса, такие как Java и C #, до такой степени, что, например, только более короткая форма (timeval tv
) была бы допустимым синтаксисом в C #.