#include <iostream>
class Point
{
private:
int x;
int y;
public:
Point( int x = 0, int y = 0 ) : x( x ), y( y )
{
}
const int & operator []( size_t i ) const
{
return i == 0 ? x : y;
}
int & operator []( size_t i )
{
return i == 0 ? x : y;
}
};
int main()
{
Point p;
p[0] = 10;
p[1] = 20;
std::cout << "p = { " << p[0] << ", " << p[1] << " }" << std::endl;
return 0;
}
#include <iostream>
using namespace std;
class A {
public:
int operator =(int n) {
cout << "Setting val to " << n << endl;
return n;
}
};
class B {
public:
A operator [](int i) {
return A();
}
};
int main() {
B b;
int n;
b[4] = 1;
return 0;
}
C++ 中没有像 . 这样的运算符
[]=
。但是有运算符[]
和=
,它们中的每一个都可以被重载。如果我理解正确,那么你的意思如下
控制台输出
编辑:如果您要使用此运算符来操作整数中的位,请查看
std::bitset
. 由于您不能返回对位的引用,因此引入了一个额外的中间类引用,它控制位。这就是此运算符在 中的定义方式
std::bitset
,它允许您设置所需的位并且引用类定义了一个隐式类型转换运算符
为了您的目的,这个声明看起来像
其中
value_type
定义为如前所述,运营商
[]=
不存在。但是您可以重载 operator[]
并从中返回一个对象,您可以在其中重载 operator=
,您已经在其中执行了必要的操作。结论: