C++ 在C+中实现枚举类型+;

C++ 在C+中实现枚举类型+;,c++,enums,C++,Enums,因此,我尝试创建一个枚举类型的类,除了我以前从未使用过枚举类型,而且在学习过程中也从未使用过im。我知道枚举类型基本上是枚举a(红色、蓝绿色)其中红色为0,蓝色为1,绿色为2。但是从那以后,我不太明白如何进一步实现这个enums类。如果我有一个头类,比如 #ifndef COLOR_H #define COLOR_H class Color { public: enum Color {red, blue, green}; }; #endif // COLOR_H

因此,我尝试创建一个枚举类型的类,除了我以前从未使用过枚举类型,而且在学习过程中也从未使用过im。我知道枚举类型基本上是
枚举a(红色、蓝绿色)其中红色为0,蓝色为1,绿色为2。但是从那以后,我不太明白如何进一步实现这个enums类。如果我有一个头类,比如

#ifndef COLOR_H
#define COLOR_H


class Color
{
    public:
        enum Color {red, blue, green};
};

#endif // COLOR_H
然后是一个cpp文件,如下所示:

#include "Color.h"

enum Color::Color {red, blue, green}{
 //dont know how to implement in here
}

如何实现成员函数,以便如果颜色从main.cpp传递1,则成员函数将显示为打印蓝色?

不需要在.cpp文件中实现-标题中的内容就足够了。顺便说一句,实际上不需要类来保存枚举。简单地写
enum Color{Red,Blue,Green}就足够了

您可以将其视为一种更简洁的书写方式:

#define Red 0
#define Blue 1
#define Green 2
#define Color int
有几个基本的区别,但关键是这也可以写在.h文件中。当然,您永远不应该使用上面的示例,这是一种可怕的编程实践。

不需要“枚举实现”(无论对您意味着什么)。您只需:

struct Color {
    enum ColorInternal {red, blue, green};
};
并访问枚举值作为
Color::red
Color::blue
Color::green
,以及枚举值作为
Color::ColorInternal

或者,您可以简单地使用
枚举类

enum class Color {red, blue, green};

并以
Color::red
的形式访问值,以
Color
的形式访问类

#include "stdafx.h"

using namespace System;

enum ECOLOR { RED, BLUE, GREEN };

class Color
{
public:
    Color();
    ~Color();
    Color(ECOLOR);
};

Color::Color(ECOLOR color)
{
    switch (color)
    {
    case RED:
        Console::WriteLine(L"Hello Red\n");
        break;
    case BLUE:
        Console::WriteLine(L"Hello Blue\n");
        break;
    case GREEN:
        Console::WriteLine(L"Hello Green\n");
        break;
    default:
        break;
    }
}

int main(array<System::String ^> ^args)
{
    Color *blue = new Color(BLUE);

    return 0;
}
#包括“stdafx.h”
使用名称空间系统;
enum ECOLOR{红、蓝、绿};
类颜色
{
公众:
颜色();
~Color();
颜色(ECOLOR);
};
颜色::颜色(ECOLOR颜色)
{
开关(彩色)
{
红色表壳:
控制台::WriteLine(L“Hello Red\n”);
打破
蓝色表壳:
控制台::WriteLine(L“Hello Blue\n”);
打破
绿色外壳:
控制台::WriteLine(L“Hello Green”);
打破
违约:
打破
}
}
int main(数组^args)
{
颜色*蓝色=新颜色(蓝色);
返回0;
}

1:简单枚举类型

您可以在标头中定义一个没有类的简单枚举类型:

enum ColorType { red, blue, green };  // Simple enum
您可以重载常见的流操作,例如打印值,定制:

ostream& operator<< (ostream& os, ColorType color) {
    switch (color) {
    case red:
        std::cout << "red" << endl;  break;
    case blue:
        std::cout << "blue" << endl;  break;
    case green:
        std::cout << "green" << endl;  break;
    }
    return os;
}
然后,您可以开始使用该类:

Color cr = Color::MyColor::red;  // access to nested color type needs some extra typing
Color choice; 
choice = cr; 
choice.print();         // of course you'd need to define print() first

那就看你如何丰富这门课了

enum颜色{红、绿、蓝}是它自己的类型定义。不需要在类中包装它。然而,将枚举转换成字符串不是由C++自然提供的。如果你想这样做,你必须使用一种变通方法。嗯,枚举实际上只是常量整数。你想达到什么目标?你还期待什么功能?如果要基于枚举常量调用特定函数,请执行专用模板(只能使用编译时常量调用)或将枚举作为参数的函数,然后,选择一个选择适当函数的交换表。实际上,我认为C++不允许为类成员使用同名。java中,C++枚举比java更原始。它们不是可以为其创建方法的类型(尽管可以用自由函数来模拟),而且它们绝对不能为单个枚举值轻松创建类枚举方法的重写,这是一个很棒的Java特性;恒色红=0;恒色蓝=1;常量颜色绿色=2。(除了不能获取枚举常量的地址)我知道,我不确定@ShadowViper学到了什么,根据我的经验,大多数人都会在typedef或const之前进行定义。如果成员的名称与struct相同,这个函数会编译吗?
class Color
{
public:
    enum MyColor { red, blue, green };  // That's just a nested type
    Color(MyColor c = red);             // That's a constructor for the class, with a default value
    void print();                       
private: 
    MyColor color;                      // That's a value
};
Color cr = Color::MyColor::red;  // access to nested color type needs some extra typing
Color choice; 
choice = cr; 
choice.print();         // of course you'd need to define print() first