2016-04-16 15 views
0

Bekämpfen Sie ein wenig mit der richtigen Methode zum Implementieren einer Klasse und einer Enumeration in C++.Verwenden von Klassen und Aufzählungen in C++

class CrossingGateRoad { 
    public: 
     boolean PowerOn(byte relayNumber) { 
      digitalWrite(relayNumber, RELAY_ON); 
      return true; 
     } 
     boolean PowerOff(byte relayNumber) { 
      digitalWrite(relayNumber, RELAY_OFF); 
      return true; 
     } 
}; 

und dann versuche ich eine Enumeration wie folgt zu erstellen:

enum { 
    CROSSINGZONE_CLEAR, // no train in crossing area, also initialized state 
    CROSSINGZONE_OCCUPIED, // train detected by the entry sensor 
    CROSSINGZONE_EXITING // train detected by the exit sensor, when sensor clears, state = CLEAR 
}; 

In C# würde ich meine Enum Namen und die Werte angeben:

public enum CommodityIndexSector 
{ 
    Currency = 1, 
    StockIndex = 2, 
    GovernmentBond = 3, 
    Metals = 4, 
    Energy = 5, 
    Grains = 6, 
    Softs = 7, 
    Meats = 8, 
    Other = 9 
} 

und ich würde zugreifen es mag so .... enumname.enumvalue. Ich bin nicht 100% sicher, dass die Klasse auch richtig aussieht.

+1

kann sein, dass du den enum-namen vergessen hast? :) –

+0

enum class CommodityIndexSector {...}; – Exceptyon

Antwort

2

In C++ enum Werte erscheinen an ihrem äußeren Umfang. Wenn Sie

enum { 
    CROSSINGZONE_CLEAR, // no train in crossing area, also initialized state 
    CROSSINGZONE_OCCUPIED, // train detected by the entry sensor 
    CROSSINGZONE_EXITING // train detected by the exit sensor, when sensor clears, state = CLEAR 
}; 

ziemlich gleichwertig #define Werte haben müssen.

Um ein Aufzählungstyp woanders es geben Sie nennen müssen:

enum CrossingZones { 
    // ^^^^^^^^^^^^^ 
    CROSSINGZONE_CLEAR, // no train in crossing area, also initialized state 
    CROSSINGZONE_OCCUPIED, // train detected by the entry sensor 
    CROSSINGZONE_EXITING // train detected by the exit sensor, when sensor clears, state = CLEAR 
}; 

und Sie den spezifischen Aufzählungstyp verweisen können:

CrossingZones crossingZones = CROSSINGZONE_CLEAR; 

eine intuitive Erklärung in Bezug auf die Werte , hat enum class wie für den aktuellen Standard:

enum class CrossingZones { 
    // ^^^^^ 
    CROSSINGZONE_CLEAR, // no train in crossing area, also initialized state 
    CROSSINGZONE_OCCUPIED, // train detected by the entry sensor 
    CROSSINGZONE_EXITING // train detected by the exit sensor, when sensor clears, state = CLEAR 
}; 

und nutzen diese aus -umfang:

CrossingZones crossingZones = CrossingZones::CROSSINGZONE_CLEAR; 
          // ^^^^^^^^^^^^^^^ 
+0

und so in einer switch-Anweisung verwenden? Fall CrossingZones :: CROSSINGZONE_OCCUPIED ....... – dinotom

+0

@dinotom Haben Sie besondere Probleme? –

+0

nein, ich habe gerade die Syntax bestätigt, da ich ein C# Typ bin – dinotom

0

In C++ 11 können Sie jetzt enum class verwenden und Sie können auch die Werte dafür angeben. Sie benötigen jedoch eine Besetzung, um den Wert zurück zu erhalten.

enum class Crossing_zone { 
    clear = 0, 
    occupied = 2, 
    exiting = 1 
}; 

int main() 
{ 
    auto myenumvar = Crossing_zone::occupied; 
    return 0; 
} 
-1

Sie den folgenden Code verwenden, um die ENUM zu erklären:

typedef enum { 
    CROSSINGZONE_CLEAR, // no train in crossing area, also initialized state 
    CROSSINGZONE_OCCUPIED, // train detected by the entry sensor 
    CROSSINGZONE_EXITING // train detected by the exit sensor 
} EnumName; 

abd dann durch den folgenden Code, um seine Werte zugreifen:

EnumName::CROSSINGZONE_OCCUPIED 
+1

Das ist c-style. Nicht wirklich empfohlen für C++. –

+0

Warum wird es nicht empfohlen? Was sind die Probleme bei der Verwendung? –