所以我正在尝试创建一个枚举类的类,除了我以前从未使用过enum类型和im在学习过程中。据我所知,枚举类型基本上是enum a(red, blue green);
,其中红色= 0,蓝色= 1,绿色= 2。但从那里我不太明白如何进一步实现这个枚举类。如果我有一个标题类,如
#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
}
如何实现成员函数,以便如果Color从main.cpp传递1,那么成员函数会打印出蓝色吗?
答案 0 :(得分:2)
不需要“枚举实现”(无论对您来说意味着什么)。你可以简单地拥有:
struct Color {
enum ColorInternal {red, blue, green};
};
并将枚举值作为Color::red
,Color::blue
,Color::green
和枚举Color::ColorInternal
进行访问。
或者,您只需使用enum class
:
enum class Color {red, blue, green};
并将值设为Color::red
,将类视为Color
。
答案 1 :(得分:0)
不需要在.cpp文件中实现 - 标题中的内容就足够了。顺便说一句,你实际上并不需要一个班级来保持一个枚举。简单地写enum Color {Red, Blue, Green};
就足够了。
您可以将其视为一种更清晰的写作方式:
#define Red 0
#define Blue 1
#define Green 2
#define Color int
有几个基本的区别,但关键是这也可以写在.h文件中。当然,你永远不应该使用上面的例子,这是一种可怕的编程习惯。
答案 2 :(得分:0)
这是另一种方式:
#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;
}
答案 3 :(得分: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;
}
在main()中,您可以轻松使用它:
ColorType val = red;
if (val==blue)
cout << "blue";
cout << val;
在大多数情况下,我建议这样做。
备选方案2:完整的颜色类
但是,您不能使用不同的语义来丰富另一个的枚举,例如允许添加颜色(甚至在每个副本上清除颜色强度)或其他成员函数。
对于这种丰富的方法,你需要一堂课。在这里,您需要稍微改变一下您的定义。首先,成员不能与类本身具有相同的名称(其他类型定义和构造函数会非常模糊!):
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
然后由你来丰富这门课。