Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;重载=运算符的包装器_C++_Operator Overloading_Accessor - Fatal编程技术网

C++ C++;重载=运算符的包装器

C++ C++;重载=运算符的包装器,c++,operator-overloading,accessor,C++,Operator Overloading,Accessor,我正在尝试围绕int开发一个非常简单的(目前)包装器类,并希望通过重载=运算符来实现如下功能: class IntWrapper { ... private: int val; } int main ( ) { IntWrapper a; int b; a = 5; // uses overloaded = to implement setter b = a; // uses overloaded = to implement

我正在尝试围绕int开发一个非常简单的(目前)包装器类,并希望通过重载=运算符来实现如下功能:

class IntWrapper
{
    ...
    private:
        int val;
}

int main ( )
{
    IntWrapper a;
    int b;

    a = 5; // uses overloaded = to implement setter
    b = a; // uses overloaded = to implement getter
}
然而,我认为这是不可能做到的。实现setter非常简单,例如:

class IntWrapper
{
    ...
    IntWrapper& operator = (int rhs) { this.val = rhs; return *this; }
    ...
}
然而,通过谷歌搜索,我发现没有办法用这种方式来做getter。我的理解是,这是因为=运算符只能被重写以将赋值给一个变量,而int是一个基本类型,因此我们不能重写它的默认实现=。这是正确的吗?如果没有,我该如何编写getter

如果这是正确的,有人对类似的东西有什么优雅的建议吗?我能找到的最接近的方法是重载转换运算符:

class IntWrapper
{
    ...
    operator int( ) { return this.val; }
    ...
}

int main ( )
{
    ...
    b = (int) a;
    ...
}
但对我来说,这似乎毫无意义,因为它几乎没有比一个简单的getVal()方法好多少


谢谢你的建议

调用转换函数不需要强制转换。平原

b = a;
我也会调用它。这样,我就可以看出它比
getVal
函数使用起来更方便。虽然我通常不使用转换函数。我更喜欢显式的
getVal
函数。特别是考虑这一项

struct W {
  W(int);
  operator int();
};

int main() {
  W w = 42;
  int a = true ? 0 : w; // Ambiguity! What conversion direction?
}

它很快就会失控…

您不需要强制转换来调用转换函数。平原

b = a;
我也会调用它。这样,我就可以看出它比
getVal
函数使用起来更方便。虽然我通常不使用转换函数。我更喜欢显式的
getVal
函数。特别是考虑这一项

struct W {
  W(int);
  operator int();
};

int main() {
  W w = 42;
  int a = true ? 0 : w; // Ambiguity! What conversion direction?
}

它很快就失去了控制…

你建议的是一种方式,我一直在使用它。您不需要将a转换为int。编译器足够聪明,可以看到b是int,它会自动为您调用运算符int cast运算符。

您建议的是方法,我一直在使用它。您不需要将a强制转换为int。编译器足够聪明,可以看到b是int,它会自动为您调用运算符int cast运算符