所以我有一个类似于这个的课程:
class CVal {
public:
void operator=(int n) {
d = n;
}
private:
int d;
};
现在每当我做
之类的事情CVal c;
switch(c) {...}
我想要访问CVal :: d,那我该怎么办呢?我想过重载一些操作符,但我找不到任何东西。
答案 0 :(得分:12)
您应该像这样定义转换运算符
class CVal {
public:
//...
operator int() const { return d; }
private:
int d;
};
或者,如果您有一个支持C ++ 2014的编译器,那么您可以通过以下方式定义它
class CVal {
public:
//...
operator auto() const { return d; }
private:
int d;
};
根据C ++标准(6.4.2开关语句)
2条件应为整数类型,枚举类型或类 类型。如果是类类型,则条件是上下文隐式的 转换(第4条)为整数或枚举类型。积分 促销活动......
答案 1 :(得分:0)
您无法访问某个类的私有成员。但是如果你想使用私有成员的价值,无论如何,你需要编写获取函数。例如:
class CVal {
public:
void operator=(int n) {
d = n;
}
int getD() { // this function returns the value of private member d
return d;
}
private:
int d;
};
现在您可以通过以下方式访问d:
CVal c;
switch(c.getD()) {...}
此选项优于隐式转换类,使其可在开关中访问。因为它可以在将来避免可能的调试错误。除了许多编码约定更喜欢这个选项。