| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 440 人关注过本帖
标题:重载[ ]操作符
只看楼主 加入收藏
fl8962
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:539
专家分:2471
注 册:2012-10-17
结帖率:96.23%
收藏
已结贴  问题点数:50 回复次数:2 
重载[ ]操作符
一个很简答的题目,用类输出一个等边直角三角形。比如
0
0 0
0 0 0
0 0 0 0
0 0 0 0 0
程序开始的时候输入行数,然后运行类中带的print函数就输出上面的图形。 类中还有 setvalue函数可以改变每一个点的值。 这个类中我重载了 [ ]操作符, 假如有一个这种类型的对象 t, 我通过操作符重载 使得t[r]返回第r行第0列的地址,然后t[r][c]可以的到第r行第c列的那个数。 现在问题出来了,比如我想改变第三行第二个数,我可以直接t[3][2]=x. 但是如果我写成t[3][5]=x,(第三行没有第五列) 那么就会出现 t[4][1]=x. 在这里我不希望当列数大于行数的时候会引起其他行的改变。我希望当列数大于行数的时候不作任何改变。请问要怎么做。谢谢
#include<iostream>
#include<iomanip>
using namespace std;
class Triangle {
 
private:
  int nr; //这个变量是行数
  int *p;  //int 型指针变量。用来存储组成图形的每个点的那个数
  
public:
  Triangle(int nrv)
  {
    nr = nrv;
    p = new int[nr*(nr+1)/2];
  }

   void setValue(int r, int c, int v) {   
      if (c>r)
        return;
      p[r*(r+1)/2+c] = v;
   }

   int * operator[] (int r)//这里就是重载[]的部分     
     {if(r<nr)
      return  p + r*(r+1)/2;   
   }
         
   int size();
   
   int getValue(int r, int c);

   void print();
   
   void clear(); //zero out the triangle
};

int Triangle::size() {
  return nr;
}

int Triangle::getValue(int r, int c) {
   return p[r*(r+1)/2+c];
}

void Triangle::print() {
   for(int r=0; r<nr; r++) {
     for(int c=0; c<=r; c++)
         cout<< setw(3) << p[r*(r+1)/2+c];
      cout<<endl;
   }
}
void Triangle::clear() {
   int sz = nr*(nr+1)/2;
   for(int i=0; i<sz; i++)
         p[i] = 0;
}


int main() {
  Triangle t(10);
  t.clear();
  t[3][4] = 7;
  t.print();
  system("pause");
}

[ 本帖最后由 fl8962 于 2014-9-6 03:50 编辑 ]
搜索更多相关主题的帖子: 三角形 
2014-09-06 03:49
天使梦魔
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:37
帖 子:564
专家分:2754
注 册:2007-8-29
收藏
得分:50 
t[3][4] = 7;
第二个括号[4]不是调用你的重载,而是C默认数组。
你以为写一个重载就可以调用二维?
可以试试代理类

http://bbs.
这贴的第5,6楼
2014-09-08 15:09
fl8962
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:539
专家分:2471
注 册:2012-10-17
收藏
得分:0 
回复 2 楼 天使梦魔
我知道,我只重载了第一个[]但是我就是求方法让第二个[]不进行默认的操作。正在看CSDN上提到的代理类。

想抽苏烟了。
2014-09-09 07:19
快速回复:重载[ ]操作符
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019403 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved