鱼C论坛

 找回密码
 立即注册
查看: 2773|回复: 4

有什么办法能让成员函数能想数据成员一样赋值么?

[复制链接]
发表于 2018-12-17 13:42:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 Croper 于 2018-12-17 20:28 编辑

比如说定义一个myrect类

  1. class myrect
  2. {
  3. public:
  4.         int left;
  5.         int right;
  6.         int top;
  7.         int bottom;

  8.         int centreX()
  9.         {
  10.                 return (left + right) / 2;
  11.         }
  12.         void SetCentreX(int x)
  13.         {
  14.                 int width = right - left;
  15.                 left = x - width / 2;
  16.                 right = x + width / 2;
  17.         }
  18. };
复制代码

类里的数据成员只有left,right,top,bottom,这个时候定义了一个成员函数centreX,但是想要centreX能像成员函数一样执行执行A.centreX()=1;之类的操作是肯定不能打到想要的效果的。。我现在唯一想到的办法只有centreX申明成另外一个类来实现
  1. class myRectPosX
  2. {
  3.         friend class myRect;
  4. private:
  5.         myRect* p;
  6. public:
  7.         operator int();
  8.         myRectPosX& operator=(int x);
  9. };

  10. class myRect
  11. {
  12. public:
  13.         int left;
  14.         int right;
  15.         int top;
  16.         int bottom;

  17.         myRectPosX centreX;
  18.         myRect()
  19.         {
  20.                 centreX.p = this;
  21.         }
  22. };

  23. myRectPosX::operator int()
  24. {
  25.         return (p->left + p->right) / 2;
  26. }
  27. myRectPosX& myRectPosX::operator=(int x)
  28. {
  29.         int width = p->right - p->left;
  30.         p->left = x - width / 2;
  31.         p->right = x + width / 2;
  32.         return *this;
  33. }

复制代码

但是这样如果有很多想要这样操作的就要额外申明很多这样的辅助类。。有没有什么更简单的办法呢?

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-12-17 15:53:45 | 显示全部楼层
不太明白楼主是想要实现什么功能,能够用文字确切地表述一下么?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-17 19:59:23 | 显示全部楼层
本帖最后由 Croper 于 2018-12-17 20:07 编辑

比如说在修改前的代码中,获得矩形的水平中心和设定矩形的水平中心分别需要写成两种完全不一样的表达方式
  1. int x1=A.centreX();
  2. A.SetCentreX(x2);
复制代码

现在我想要这两个函数不再割离,获得矩形的水平中心和设定矩形的水平中心能写成这样的形式
  1. int x1=A.centreX;
  2. A.centreX=x2;
复制代码

现在唯一想到的办法只有把centreX设定成一个类,然后重载它的赋值函数和类型转换函数。就如同主楼的下面那段代码一样
但是这样太麻烦了,如果还想设置height,width什么的,那就得给每个成员函数单独写一个类。。。我想问的就是有没有什么简单一点的办法?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-18 15:13:27 | 显示全部楼层
一天了。。已经飘到第二页去了。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-21 00:20:59 | 显示全部楼层

。。。有人能看一看么。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-14 16:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表