我有兴趣尝试创建自定义类型,然后使用点语义访问其成员。例如:
Class A{ //simplified, omitting constructors and other methods
private:
float numbers[3];
public:
float x(){ return numbers[0]; }
float y(){ return numbers[1]; }
float z(){ return numbers[2]; }
}
所以我可以这样做:
A a;
//do stuff to populate `numbers`
float x=a.x;
但我还想在numbers
左右开始制作元素,这样我就能做到这样的事情:
A a;
a.y=5; //assigns 5 to numbers[1]
如何进行此设置方法?
答案 0 :(得分:1)
首先。你创建了函数 x,y和z,但是将它们分配给float。这不行。 第二。更改这些功能以返回参考:
class A{ //simplified, omitting constructors and other methods
private:
float numbers[3];
public:
float & x(){ return numbers[0]; }
float & y(){ return numbers[1]; }
float & z(){ return numbers[2]; }
};
...
A point;
float x = point.x();
point.x() = 42.0f;
还有另一种方法:将引用声明为类的成员并在c-tor中初始化它们:
class A{ //simplified, omitting constructors and other methods
private:
float numbers[3];
public:
float & x;
float & y;
float & z;
A() : x( numbers[ 0 ] ), y( numbers[ 1 ] ), z( numbers[ 2 ] ) {}
};
...
A point;
float x = point.x;
point.x = 42.0f;
P.S。注意评论,这给了@MikeSeymour
答案 1 :(得分:1)
您可以返回允许分配的引用:
float & x(){ return numbers[0]; }
^
// usage
A a;
a.x() = 42;
您还应该有const
重载,以允许对const
对象进行只读访问:
float x() const {return numbers[0];}
^^^^^
// usage
A const a = something();
float x = a.x();
答案 2 :(得分:0)
除非您实际拥有名为x,y和z的公共变量。
或者您可以返回参考,然后执行a.y() = 5