我来我网
https://5come5.cn
 
您尚未 登录  注册 | 菠菜 | 软件站 | 音乐站 | 邮箱1 | 邮箱2 | 风格选择 | 更多 » 
 

本页主题: 求助::关于"c++ primer"第一个数组的例子 显示签名 | 打印 | 加为IE收藏 | 收藏主题 | 上一主题 | 下一主题

ollo



性别: 帅哥 状态: 该用户目前不在线
头衔: ~~非言叶党~~
等级: 人见人爱
家族: 考研俱乐部
发贴: 2676
威望: 0
浮云: 1130
在线等级:
注册时间: 2006-01-12
最后登陆: 2012-01-12

5come5帮你背单词 [ lukewarm /'lu:kwo:m/ a. (指液体)微温的,不热心的 ]


求助::关于"c++ primer"第一个数组的例子

好像根据书中那样写出来的程序
虽然说是重载了operator[ ] ,好像还是不能
象这样 IntArray myArray;
        myArray[4] = 5 ; // 这样的赋值根本就通过不了!!!!

而他下面的例子中这样的赋值比比皆是

请教一下^^^^^达人帮忙解释一下哈,谢谢


附上我写的代码:
//IntArray.h

#include <cassert>

class IntArray
{
    public:
        explicit IntArray(int size = defaultsize);
        IntArray ( int size, int *array);
        IntArray ( const IntArray &rhs);
        virtual ~IntArray(){delete [] ia;};
        int operator[](int index);
        bool operator==(const IntArray& rhs) const;
        bool operator!=(const IntArray& rhs) const;
        IntArray& operator=(const IntArray& rhs);
        int size() const {return (_size);};
        int min() const;
        int max() const;
       
    private:
        int *ia;
        static const int defaultsize;
        int _size;
        void inti(int size,int *array);
};

const int IntArray::defaultsize = 10;//vc++ 6.0 中这个好像只能放在外面???

IntArray::IntArray( int size)
{
        inti(size, 0);
}

IntArray::IntArray(int size, int* array)
{
        inti( size, array);
}

IntArray::IntArray( const IntArray& rhs)
{
        inti(rhs._size, rhs.ia);
}

void IntArray::inti(int size, int* array)
{
        _size = size;
        ia = new int[_size];
        for(int ix=0; ix<_size; ++ix)
          if(!array)
          ia[ix] = 0;
          else
          ia[ix] = array[ix];
             
}

int IntArray::operator[](int index)
{
        assert(index >=0 && index <_size);
        return ia[index];
}

bool IntArray::operator==(const IntArray& rhs) const
{
        bool flag = true;
        for(int ix=0; ix < _size; ++ix)
        {
          if( ia[ix]!= rhs.ia[ix])
          flag = false;
        }
        return flag;
}

bool IntArray::operator!=(const IntArray& rhs) const
{
        bool flag = true;
        for(int ix=0; ix<_size; ++ix)
        {
          if( ia[ix] = =rhs.ia[ix])
          flag = false;
        }
        return flag;
}

IntArray& IntArray::operator=(const IntArray& rhs)
{
        if( this == &rhs)
        return (*this);
        else
        inti(rhs._size, rhs.ia);
        return (*this);
}

int IntArray::min() const
{
        int min = ia[0];
        for(int ix=1; ix<_size; ++ix)
        if( ia[ix] < min )
        min = ia[ix];
        return min;
}

int IntArray::max() const
{
        int max = ia[0];
        for(int ix=1; ix< _size; ++ix)
          if( ia[ix] > max)
          max = ia[ix];
        return max;
}

//IntArray.h end.



//IntArray.cpp


#include <iostream>
#include "IntArray.h"
using namespace std;

int main(int argc, char** argv)
{
  int array[10] = {0,1,2,3,4,5,6,7,8,9};
  IntArray myArray(10,array);
  IntArray array1;
  array1 = myArray;
  array1[4] = 10;//这行通过不了...
  cout<<array1.size()<<endl;
  cout<<(array1!= myArray)<<endl;
  cout<<myArray.max()<<endl;
  cout<<myArray.min()<<endl;
  cout<<array1.min()<<endl;
  cout<<array1[4]<<endl;
  return 0;
}


//IntArray.cpp end.


[ 此贴被ollo在2006-11-19 17:23重新编辑 ]
顶端 Posted: 2006-11-19 13:39 | [楼 主]
perfect_刘



性别: 帅哥 状态: 该用户目前不在线
等级: 栋梁之材
发贴: 960
威望: 0
浮云: 1105
在线等级:
注册时间: 2005-11-20
最后登陆: 2009-05-08

5come5帮你背单词 [ excavate /'ekskəveit/ v. 凿,挖掘 ]


你返回的是一个什么东西哦?
要对他进行操作的话你要么返回指针 要么返回一个引用撒!
直接返回值是不能拿来做为左侄操作的!~~
顶端 Posted: 2006-11-19 14:27 | [1 楼]
perfect_刘



性别: 帅哥 状态: 该用户目前不在线
等级: 栋梁之材
发贴: 960
威望: 0
浮云: 1105
在线等级:
注册时间: 2005-11-20
最后登陆: 2009-05-08

5come5帮你背单词 [ fate /feit/ n. 命运 ]


将那个重载函数定义为
int &operator [](int index)
返回值为
return *(ia+index);
顶端 Posted: 2006-11-19 14:29 | [2 楼]
perfect_刘



性别: 帅哥 状态: 该用户目前不在线
等级: 栋梁之材
发贴: 960
威望: 0
浮云: 1105
在线等级:
注册时间: 2005-11-20
最后登陆: 2009-05-08

5come5帮你背单词 [ probability /probə'biliti/ n. 可能性,可能发生之事 ]


没注意看其他的·!
顶端 Posted: 2006-11-19 16:42 | [3 楼]
perfect_刘



性别: 帅哥 状态: 该用户目前不在线
等级: 栋梁之材
发贴: 960
威望: 0
浮云: 1105
在线等级:
注册时间: 2005-11-20
最后登陆: 2009-05-08

5come5帮你背单词 [ configuration /kənfigju'reiən/ n. 配置,布局,构造 ]


哎呀我对你崽儿无语咯!!!
你看你的!=重载函数,??????
Copy code
bool IntArray::operator!=(const IntArray& rhs) const
{
  bool flag = true;
  for(int ix=0; ix<_size; ++ix)
  {
    if( ia[ix] = rhs.ia[ix]) //这里是赋值不是比较
        flag = false;
  }
  return flag;
}

全部重新赋值当然就是4咯!
顶端 Posted: 2006-11-19 17:03 | [4 楼]
perfect_刘



性别: 帅哥 状态: 该用户目前不在线
等级: 栋梁之材
发贴: 960
威望: 0
浮云: 1105
在线等级:
注册时间: 2005-11-20
最后登陆: 2009-05-08

5come5帮你背单词 [ international /intə(:)'næənl/ a. 世界性的,国际的 ]


Quote:
引用第4楼ollo于2006-11-19 15:02发表的:



还有几是return (ia[index]);这句好像不改也通过了
想想好象不改也是对的啊,
.......

哦 那样是可以的
不过指针我习惯这样写
顶端 Posted: 2006-11-19 17:06 | [5 楼]
perfect_刘



性别: 帅哥 状态: 该用户目前不在线
等级: 栋梁之材
发贴: 960
威望: 0
浮云: 1105
在线等级:
注册时间: 2005-11-20
最后登陆: 2009-05-08

5come5帮你背单词 [ repeatedly /ri'pi:tidli/ ad. 反复地,再三地 ]


还有你程序内存泄露问题大大的有啊~~~!!
你写的这个类真的是一个可怕的类!!!
呵呵
顶端 Posted: 2006-11-19 17:09 | [6 楼]
perfect_刘



性别: 帅哥 状态: 该用户目前不在线
等级: 栋梁之材
发贴: 960
威望: 0
浮云: 1105
在线等级:
注册时间: 2005-11-20
最后登陆: 2009-05-08

5come5帮你背单词 [ headmaster /'hed'ma:stə/ n. (中小学的)校长 ]


Quote:
引用第11楼ollo于2006-11-19 17:29发表的:


初始化是4没错
那我下面加的那句:array1[4] = 22;
怎么没用呢?

有用 ,但是你后面调用 !=时候又对array[4]赋值了嘛!!
顶端 Posted: 2006-11-19 17:38 | [7 楼]
perfect_刘



性别: 帅哥 状态: 该用户目前不在线
等级: 栋梁之材
发贴: 960
威望: 0
浮云: 1105
在线等级:
注册时间: 2005-11-20
最后登陆: 2009-05-08

5come5帮你背单词 [ porch /po:t/ n. 门廊 ]


其实就两点,
不用的delete掉,
还有不要两次delete同一块内存!
你要有你自己就是指针的感觉,内存中随你指!!
呵呵


[ 此贴被perfect_刘在2006-11-19 18:23重新编辑 ]
顶端 Posted: 2006-11-19 18:13 | [8 楼]
perfect_刘



性别: 帅哥 状态: 该用户目前不在线
等级: 栋梁之材
发贴: 960
威望: 0
浮云: 1105
在线等级:
注册时间: 2005-11-20
最后登陆: 2009-05-08

5come5帮你背单词 [ geometry /d3əi'omitri/ n. 几何(学) ]


就是 你对ia重新分配一块内存,但是ia以前指向的内存你就没有管了!!
析构函数只是对象销毁时候调用的,此时也没有调用
应该先释放在从新分配
顶端 Posted: 2006-11-19 19:41 | [9 楼]
perfect_刘



性别: 帅哥 状态: 该用户目前不在线
等级: 栋梁之材
发贴: 960
威望: 0
浮云: 1105
在线等级:
注册时间: 2005-11-20
最后登陆: 2009-05-08

5come5帮你背单词 [ clockwise /'klokwaiz/ a. & ad. 顺时针方向的/地 ]


你自己实验一下撒!!
不过还有个问题,构造函数中应该将ia初始为null 不然ia是个很危险的指针
你好生看下你的if和else运行流程
最好跟踪调式一步一步的看!~~
顶端 Posted: 2006-11-19 20:26 | [10 楼]
我来我网·5come5 Forum » 程序员之家

Total 0.011449(s) query 6, Time now is:11-24 00:16, Gzip enabled
Powered by PHPWind v5.3, Localized by 5come5 Tech Team, 黔ICP备16009856号