我有一个基类Shape
和其他一些派生类,如Circle
,Rectangle
等等。
这是我的基类
class Shape {
private:
enum Color {
Red,
Orange,
Yellow,
Green
};
protected:
int X;
int Y;
// etc...
};
这是我的派生类之一
class Rectangle : public Shape {
private:
int Base;
int Height;
string shapeName;
//etc...
};
这就是我调用构造函数的方式:
Rectangle R1(1, 3, 2, 15, "Rectangle 1");
我的构造函数:
Rectangle::Rectangle(int x, int y, int B, int H, const string &Name)
:Shape(x, y)
{
setBase(B);
setHeight(H);
setShapeName(Name);
}
我想在构造函数中添加一个参数,这样我就可以在我的基类中使用enum Color
传递形状的颜色。我怎样才能做到这一点?我还想将颜色打印为string
。我不知道如何在构造函数中使用enum
作为参数。
感谢任何帮助...
答案 0 :(得分:8)
首先,您应该使Color受到保护或公开。从枚举到字符串的一种简单方法是使用数组。
class Shape {
public:
enum Color {
Red = 0, // although it will also be 0 if you don't write this
Orange, // this will be 1
Yellow,
Green
};
};
class Rectangle : public Shape {
public:
Rectangle(int x, int y, int B, int H, Color color);
};
string getColorName(Shape::Color color) {
string colorName[] = {"Red", "Orange", "Yellow", "Green"};
return colorName[color];
}
void test() {
// now you may call like this:
Rectangle r(1,2,3,4, Shape::Red);
// get string like this:
string colorStr = getColorName(Shape::Yellow);
}
答案 1 :(得分:0)
enum
的类型名称是其名称,而类中的名称隐式解析为属于该类。在这种情况下,像Shape(Color color)
这样的构造函数参数将定义一个名为color
的基类构造函数参数,该参数具有enum Color
类型。
然后你的派生类可以调用基础构造函数,例如: Rectangle(int x, int y, int width, int height, const char* name, Color color): Shape(color) { ... }
。
请注意,您还必须更改enum
的可见性:子类无法使用private:
枚举,因此它必须至少位于protected:
或{{1基类public:
的一部分。
就Shape
而言......请更好地描述您打算做什么。例如,您是否尝试打印颜色名称或其数字string
值?如果是前者,你可以编写一个这样的辅助方法:
enum