C++ 在C+中实现枚举类型+;
因此,我尝试创建一个枚举类型的类,除了我以前从未使用过枚举类型,而且在学习过程中也从未使用过im。我知道枚举类型基本上是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
枚举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