免费注册 查看新帖 |

Chinaunix

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

如何实现 + 字符重载, 谢谢。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-06-03 06:08 |只看该作者 |倒序浏览
比如:

    typedef struct
    {
        size_t size;
        size_t stride;
        double *data;
    } TEST

    函数:    TEST *plus(TEST *A, TEST *B);   
               (A->data)[t]+(B->data)[t], t=0,...,((A->size)-1)
    ......
    TEST *C;
    C= plus(A,B);

    我想实现 C=A+B 可以么? 比如用宏。operator也可以。



还有:
    TEST *A;
    ...
   (A->data)[10]; 读取第11个数据

   怎么用A[10]来读取同样的数据呢?


谢谢!

[ 本帖最后由 hangover 于 2006-6-3 06:24 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2006-06-03 23:19 |只看该作者
自己顶以下

论坛徽章:
0
3 [报告]
发表于 2006-06-03 23:46 |只看该作者
原帖由 hangover 于 2006-6-3 06:08 发表
比如:

    typedef struct
    {
        size_t size;
        size_t stride;
        double *data;
    } TEST

    函数:    TEST *plus(TEST *A, TEST *B);   
               (A->data)[t]+ ...



你是 用 c 还是 c++ 实现?

用 c++ 的话,建议将 struct  改为 class, 并实现自已 operator +  函数。private 属性的数据是不能

这样访问的,须经由 member function 访问!

如果 用 c 实现只能用 struct 了,不能有 c = a + b; 这种形式!


你这样使用
  1.     TEST *A;
  2.     ...
  3.    (A->data)[10]; 读取第11个数据
复制代码


是就是读取第11个数据,但你要小心这个数据源是在哪的? 来源可靠? 是非常不好的设计


(A->data)[10]  与 A[10] 是不同的!

论坛徽章:
0
4 [报告]
发表于 2006-06-04 05:01 |只看该作者
谢谢了。
第二个问题我好像没说明白,
    TEST *A;
    分配空间给A;
    初始化数据给A;

这个时候我可以用(A->data)[10] 来读取第11个数据,
但是我不喜欢这种格式, 我想变成 A[10] ,
就是 把[] 给overload了,
不知道能不能实现啊?

谢谢

论坛徽章:
0
5 [报告]
发表于 2006-06-04 05:11 |只看该作者
其实

我就是觉得A[]要比(A->data)[]会节省很多空间,而且容易读.
我主要是做科学计算, 所以最好把code写的公式化一些.

c++里[]应该可以overload吧,
不过觉得c好像要比c++ 更cool些.

各位指点一下吧.

谢谢

论坛徽章:
0
6 [报告]
发表于 2006-06-04 07:56 |只看该作者
原帖由 hangover 于 2006-6-4 05:11 发表
其实

我就是觉得A[]要比(A->data)[]会节省很多空间,而且容易读.
我主要是做科学计算, 所以最好把code写的公式化一些.

c++里[]应该可以overload吧,
不过觉得c好像要比c++ 更cool些.

各位指点一下吧. ...


括号是多余的,这样子就行了:a->data[10];

A[] 与 A->data[] 根本就是两个不同的概念,怎么能混为一谈呢?

LZ 你先要搞明白这些!

在这里,operator[] 不能按照你的意思去重载,A[] 与 A->data[] 是两个不同的访问方法,所以不可能去

重载 A[] 而达到 A->data[] 的效果! 这样违反的 重载操作符的原则!

论坛徽章:
0
7 [报告]
发表于 2006-06-06 22:22 |只看该作者
那看来 是不行了。

谢了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP