Беспорядок объявления класса - имя между закрывающей скобкой и точкой с запятой - PullRequest
5 голосов
/ 27 марта 2010
class CRectangle {
    int x, y;
  public:
    void set_values (int,int);
    int area (void);
  } rect;

В этом примере, что означает «прямоугольник» после закрывающей скобки и между точкой с запятой в этом определении класса? У меня проблемы с поиском четкого объяснения. Кроме того: Что бы это ни было, вы можете сделать это и для структур?

Ответы [ 4 ]

11 голосов
/ 27 марта 2010

rect - имя переменной (в данном случае объект).

Это так же, как если бы он сказал:

  int rect;

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

  CRectangle rect;

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

И да, это работает для структур:

  struct SRectangle { int x, y; } rect;

На самом деле вам даже не нужно давать имя типу, если вы не планируете использовать его снова:

  struct { int x, y; } rect;

это называется "анонимная структура" (и это также работает для классов).

2 голосов
/ 27 марта 2010

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

1 голос
/ 27 марта 2010

Единственное различие между структурами и классами состоит в том, что структуры имеют общедоступное наследование по умолчанию и доступ, а классы по умолчанию используют private для обоих.

1 голос
/ 27 марта 2010

Он объявляет экземпляр. Прямо как:

class CRectangle
{
    // ...
};

CRectangle rect;

Нет разницы между class и struct в C ++, за исключением struct s по умолчанию public (в отношении спецификаторов доступа и наследования)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...