Вызов перечислений в другом классе в C ++ - PullRequest
3 голосов
/ 05 декабря 2011

Если мы определим два класса C ++. Один из них:

abstract class A {
  public:
    enum E {F, G, H;}
};

Другой класс B, и как я могу использовать перечисление E в классе A? Предполагая, что оба B и A находятся в одном и том же пространстве имен. Я знаю, что в C # мы можем использовать что-то вроде:

A.E

напрямую, но, похоже, дело не в C ++.

Ответы [ 2 ]

10 голосов
/ 05 декабря 2011

В C ++ . и -> предназначены для доступа к члену этого конкретного экземпляра объекта A. :: предназначен для доступа к предметам в классе A. Сюда входят статика, перечисления и указатели функций.

Таким образом, в C ++ вы хотите A::F или A::G, если хотите получить значение enum.

для типа enum, который вы делаете A::E

class A
{
public:
    enum E { F , G , H};
    virtual ~A() = 0; //a pure virtual function to make the class abstract
};

int main()
{
    A::E x; // x is declared as the enum
    x = A::F; // x is assigned a particular enum value

    return 0;
}

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

1 голос
/ 05 декабря 2011

C # имеет один оператор .. C ++ имеет несколько: ., -> и ::. Для занятий вы используете последний.

Следовательно, оно будет A::E.

Помните также, что в C ++ константа enum отправляется в родительское пространство имен, а не в enum, как в C #. Следовательно, в C # у вас будет A.E.F, а в C ++ - A::F.

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