有什么办法能让成员函数能想数据成员一样赋值么?
本帖最后由 Croper 于 2018-12-17 20:28 编辑比如说定义一个myrect类
class myrect
{
public:
int left;
int right;
int top;
int bottom;
int centreX()
{
return (left + right) / 2;
}
void SetCentreX(int x)
{
int width = right - left;
left = x - width / 2;
right = x + width / 2;
}
};
类里的数据成员只有left,right,top,bottom,这个时候定义了一个成员函数centreX,但是想要centreX能像成员函数一样执行执行A.centreX()=1;之类的操作是肯定不能打到想要的效果的。。我现在唯一想到的办法只有centreX申明成另外一个类来实现
class myRectPosX
{
friend class myRect;
private:
myRect* p;
public:
operator int();
myRectPosX& operator=(int x);
};
class myRect
{
public:
int left;
int right;
int top;
int bottom;
myRectPosX centreX;
myRect()
{
centreX.p = this;
}
};
myRectPosX::operator int()
{
return (p->left + p->right) / 2;
}
myRectPosX& myRectPosX::operator=(int x)
{
int width = p->right - p->left;
p->left = x - width / 2;
p->right = x + width / 2;
return *this;
}
但是这样如果有很多想要这样操作的就要额外申明很多这样的辅助类。。有没有什么更简单的办法呢?
不太明白楼主是想要实现什么功能,能够用文字确切地表述一下么? 本帖最后由 Croper 于 2018-12-17 20:07 编辑
比如说在修改前的代码中,获得矩形的水平中心和设定矩形的水平中心分别需要写成两种完全不一样的表达方式int x1=A.centreX();
A.SetCentreX(x2);
现在我想要这两个函数不再割离,获得矩形的水平中心和设定矩形的水平中心能写成这样的形式int x1=A.centreX;
A.centreX=x2;
现在唯一想到的办法只有把centreX设定成一个类,然后重载它的赋值函数和类型转换函数。就如同主楼的下面那段代码一样
但是这样太麻烦了,如果还想设置height,width什么的,那就得给每个成员函数单独写一个类。。。我想问的就是有没有什么简单一点的办法? 一天了。。已经飘到第二页去了。。{:5_96:} {:5_96:}{:5_96:}{:5_96:}
。。。有人能看一看么。。
页:
[1]