免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3556 | 回复: 10
打印 上一主题 下一主题

[C++] 怎么强制用户每次使用时都强制调用函数? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-05-16 13:31 |只看该作者 |倒序浏览
比如这样
  1. class A {
  2. public:
  3.   int* GetA() {
  4.     return &a;
  5.   }
  6. private:
  7.   int a_;
  8. };
复制代码
我想让用户每次都想得到a的值都必须调用GetA(),不允许用户保留指针:
int*p = A->GetA();这样,应该怎么做?xiexie

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
2 [报告]
发表于 2011-05-16 13:38 |只看该作者
这个语法上没有办法的

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:49:45
3 [报告]
发表于 2011-05-16 13:44 |只看该作者
GetA()返回引用即可,或者封装指针{:3_189:}

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
4 [报告]
发表于 2011-05-16 15:07 |只看该作者
GetA()返回引用即可,或者封装指针
koolcoy 发表于 2011-05-16 13:44



    引用也好、指针也好,都对应着那个a的地址,这样每次取的时候应该都取的最新值,可LZ又说不允许保存指针,似乎有矛盾。

没办法限制使用者把a的值赋值给一个变量。

论坛徽章:
0
5 [报告]
发表于 2011-05-16 15:23 |只看该作者
noncopyable?

论坛徽章:
1
双子座
日期:2014-08-29 17:15:03
6 [报告]
发表于 2011-05-16 15:44 |只看该作者
不引用就别返回指针了呗

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:56:11
7 [报告]
发表于 2011-05-16 17:20 |只看该作者
做什麽用?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
8 [报告]
发表于 2011-05-16 18:03 |只看该作者
罚款就行了

论坛徽章:
0
9 [报告]
发表于 2011-05-16 20:37 |只看该作者
比如这样我想让用户每次都想得到a的值都必须调用GetA(),不允许用户保留指针:
int*p = A->GetA();这样, ...
jerrylying 发表于 2011-05-16 13:31



    这个可以考虑如下办法:

在GETA()内部增加一个静态存储周期的跟a类型一样的变量x,或者动态分配的也行,视情况而定吧。GETA()返回的是x的地址,每次调用GETA()时,先复制a的值到x,这样想得到最新的a,就必须调用GETA了,否则通过指针得到的都是x的可能已经过时的值。

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
10 [报告]
发表于 2011-05-16 21:24 |只看该作者
这个可以考虑如下办法:

在GETA()内部增加一个静态存储周期的跟a类型一样的变量x,或者动态 ...
supermegaboy 发表于 2011-05-16 20:37



    这不是埋炸弹么
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP