C ++使用Class作为变量

时间:2015-06-30 16:31:32

标签: c++ class variables operator-overloading operators

所以我有一个类似于这个的课程:

class CVal {
public:
    void operator=(int n) {
        d = n;
    }
private:
    int d;
};

现在每当我做

之类的事情
CVal c;
switch(c) {...}

我想要访问CVal :: d,那我该怎么办呢?我想过重载一些操作符,但我找不到任何东西。

2 个答案:

答案 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()) {...}

此选项优于隐式转换类,使其可在开关中访问。因为它可以在将来避免可能的调试错误。除了许多编码约定更喜欢这个选项。