Беспорядок объявления класса - называет между закрывающей фигурной скобкой и точкой с запятой

class CRectangle {
    int x, y;
  public:
    void set_values (int,int);
    int area (void);
  } rect;

В этом примере, что делает 'rect' после того, как закрывающая фигурная скобка и между точкой с запятой означает в этом определении класса? Я испытываю затруднения при нахождении четкого объяснения. Также: Независимо от того, что это, можно ли сделать это для структур также?

5
задан Matthew H 26 March 2010 в 21:00
поделиться

4 ответа

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

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

  int rect;

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

  CRectangle rect;

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

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

  struct SRectangle { int x, y; } rect;

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

  struct { int x, y; } rect;

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

11
ответ дан 18 December 2019 в 11:55
поделиться

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

2
ответ дан 18 December 2019 в 11:55
поделиться

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

class CRectangle
{
    // ...
};

CRectangle rect;

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

1
ответ дан 18 December 2019 в 11:55
поделиться

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

1
ответ дан 18 December 2019 в 11:55
поделиться