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

« 1 2» Pages: ( 1/2 total )
本页主题: 求助::关于"c++ primer"第一个数组的例子 显示签名 | 打印 | 加为IE收藏 | 收藏主题 | 上一主题 | 下一主题

ollo



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

5come5帮你背单词 [ beneath /bi'ni:θ/ prep. 在…下面(下方),紧靠着…底下 ]


求助::关于"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帮你背单词 [ resign /ri'zain/ vt. 辞职,放弃,使听(顺)从;vi. 辞职 ]


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



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

5come5帮你背单词 [ alone /ə'ləun/ a. 单独的,孤独的,唯一的;ad. 单独的,独自地,只有,仅仅 ]


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



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

5come5帮你背单词 [ pan /pæn/ n. 平底锅 ]


恩蝈蝈说的对哈,一开始好像是没通过就改了,后来就忘了哈^^^

谢谢哈

还有一个问题

就是
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] = 22;//这行现在可以通过了...
cout<<array1.size()<<endl;
cout<<(array1!= myArray)<<endl;
cout<<myArray.max()<<endl;
cout<<myArray.min()<<endl;
cout<<array1.min()<<endl;
cout<<array1[4]<<endl;//但是这边打印的值为什么还是4呢?
return 0;
}
顶端 Posted: 2006-11-19 14:58 | [3 楼]
ollo



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

5come5帮你背单词 [ horsepower /'ho:spauə/ n. 马力 ]


Quote:
引用第2楼perfect_刘于2006-11-19 14:29发表的:
将那个重载函数定义为
int &operator [](int index)
返回值为
return *(ia+index);



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

ia+index 一地址,再加* 解引用就是值,那直接 ia[index] 也是值啊


[ 此贴被ollo在2006-11-19 15:08重新编辑 ]
顶端 Posted: 2006-11-19 15:02 | [4 楼]
perfect_刘



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

5come5帮你背单词 [ considerable /kən'sidərəbl/ a. 值得考虑的,相当(在、多)的 ]


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



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

5come5帮你背单词 [ conscientious /koni'enəs/ a. 认真的,勤勤恳恳的 ]


哎呀我对你崽儿无语咯!!!
你看你的!=重载函数,??????
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 | [6 楼]
perfect_刘



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

5come5帮你背单词 [ think /θiŋk/ vt. 认为,以为,想要,打算;vi. 思考,认为 ]


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



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

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



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

5come5帮你背单词 [ sharpen /'a:pən/ vt. 使锐利,使急剧;vi. 变尖,尖锐化 ]


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



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

5come5帮你背单词 [ forever /fə'revə/ ad. 永远 ]


Quote:
引用第8楼perfect_刘于2006-11-19 17:09发表的:
还有你程序内存泄露问题大大的有啊~~~!!
你写的这个类真的是一个可怕的类!!!
呵呵


哈哈,大哥 我学c++才几天啊,我也知道有内存泄露,但是你说咱现在还没学到那种境界去考虑也没用啊

恩那个比较那边是偶疏忽了(真是[屏蔽],丢人,汗!)......

谢谢指点哈...
顶端 Posted: 2006-11-19 17:22 | [9 楼]
ollo



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

5come5帮你背单词 [ division /di'vi3ən/ n. 分,分开,分配,隔开,部门 ]


还有那个,,兄弟有时间能不能在上面那个代码上解决内存泄露问题给我看下,学习一下

谢谢了....
顶端 Posted: 2006-11-19 17:24 | [10 楼]
ollo



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

5come5帮你背单词 [ dissolve /di'zolv/ v. (使)溶解,解散 ]


Quote:
引用第6楼perfect_刘于2006-11-19 17:03发表的:
全部重新赋值就是4...


初始化是4没错
那我下面加的那句:array1[4] = 22;
怎么没用呢?
顶端 Posted: 2006-11-19 17:29 | [11 楼]
perfect_刘



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

5come5帮你背单词 [ artistic /a:'tistik/ a. 艺术(家)的,美术(家)的 ]


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


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

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



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

5come5帮你背单词 [ shall /æl, əl/ aux. & v. 将,会,必须 ]


Quote:
引用第12楼perfect_刘于2006-11-19 17:38发表的:

有用 ,但是你后面调用 !=时候又对array[4]赋值了嘛!!


我晕…………就是就是,今天晕糊了

恩,谢谢

那那个关于内存泄露的问题,请蝈蝈再指教一下哈

不胜感激
顶端 Posted: 2006-11-19 17:42 | [13 楼]
perfect_刘



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

5come5帮你背单词 [ safeguard /'seifga:d/ vt. 保护,保卫;n. 保卫(措施) ]


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


[ 此贴被perfect_刘在2006-11-19 18:23重新编辑 ]
顶端 Posted: 2006-11-19 18:13 | [14 楼]
« 1 2» Pages: ( 1/2 total )
我来我网·5come5 Forum » 程序员之家

Total 0.008572(s) query 5, Time now is:09-16 23:04, Gzip enabled
Powered by PHPWind v5.3, Localized by 5come5 Tech Team, 黔ICP备16009856号