我来我网
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帮你背单词 [ naked /'neikid/ 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帮你背单词 [ progress /'prəugres, prə'gres/ n. & vi. 前进,进展,进步,发展 ]


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



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

5come5帮你背单词 [ horse /ho:s/ n. 马 ]


将那个重载函数定义为
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帮你背单词 [ musical /'mju:zikəl/ a. 音乐的,悦耳的,有音乐才能的;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帮你背单词 [ dissolve /di'zolv/ v. (使)溶解,解散 ]


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帮你背单词 [ rot /rot/ v. (使)腐烂,(使)循环 ]


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



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

5come5帮你背单词 [ arc /a:k/ 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 | [6 楼]
perfect_刘



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

5come5帮你背单词 [ provincial /prə'vinəl/ n. 省的,偏狭的,乡下的 ]


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帮你背单词 [ overwhelming /əuvə'hwelmiŋ/ a. 势不可挡的,压倒的 ]


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



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

5come5帮你背单词 [ somebody /'sΛmbədi/ pron. 有人,某人 ]


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帮你背单词 [ curse /kə:s/ v. & n. 诅咒,谩骂 ]


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

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



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

5come5帮你背单词 [ strife /straif/ n. 纷争,冲突 ]


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帮你背单词 [ bedroom /'bedrum/ n. 卧室 ]


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帮你背单词 [ advise /əd'vaiz/ vt. 劝告,建议,通告,通知 ]


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帮你背单词 [ moan /məun/ n. 呻吟声,哀叹声;v. 呻吟,哀叹 ]


其实就两点,
不用的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.011505(s) query 5, Time now is:11-23 21:02, Gzip enabled
Powered by PHPWind v5.3, Localized by 5come5 Tech Team, 黔ICP备16009856号