您的位置:程序门 -> c/c++ -> c++ 语言



dev c++ 4.9.9.2问题


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


dev c++ 4.9.9.2问题
发表于:2008-01-14 08:22:53 楼主
下面的程序是一个安全数组   问2个问题
当只创建一个对象时   没有任何问题   可是在加一个就会出错  
例如将主函数改为
int   main()
{
        array   a(7);
        array   b(7);
        cin> > a;
        cout < <a;
        cout < <a.getsize();
        cin> > b;
        cout < <b;
        system("pause");
        return   0;
}
不知道为什么   请大家帮忙看看
我用的编译器是dev   c++   4.9.9.2


//   driver   for   simple   class   array1
#include   <iostream>
#include   <iomanip>
using   std::cout;
using   std::cin;
using   std::endl;
using   std::ostream;
using   std::istream;
using   std::setw;
//#include   "array1.cpp"
class   array
{
 

              friend   ostream   &operator < <   (ostream   &,   const   array   &);
              friend   istream   &operator> >   (istream   &,   array   &);
public:
                array(int   as=10);
                array(const   array   &);
                ~array();
                int   getsize()const;

                const   array   &operator=(const   array   &);
                bool   operator==(const   array   &)   const;
                bool   operator!=(const   array   &right)   const
                {
                          return   !(*this==right);
                }
               
                int   &operator[](int);
                const   int   &operator[](int)   const;
                static   int   getarraycount();

  private:
                int   size;
                int   *ptr;
                static   int   arraycount;
};


int   array::arraycount=0;

array::array(int   as)
{
      size=(as> 0?   as:10);
      assert(ptr!=0);
      ++arraycount;
      for(int   i=0;i <size;i++)
          ptr[i]=0;
}

array::array(const   array   &init):size(init.size)
{
        ptr=new   int[size];
        assert(ptr!=0);
        ++arraycount;
       
        for(int   i=0;i <size;i++)
          ptr[i]=init.ptr[i];
}

array::~array()
{
        delete[]   ptr;
        --arraycount;
}


int   array::getsize()   const
{
        return   size;
}


const   array   &array::operator=(const   array   &right)
{
            if(&right!=this)
            {
                  if(size!=right.size)
                      {
                            delete[]   ptr;
                            size=right.size;
                            ptr=new   int[size];
                            assert(ptr!=0);
                      }
                      for(int   i=0;i <size;i++)
                          ptr[i]=right.ptr[i];
            }
      return   *this;
}

bool   array::operator==(const   array   &right)   const
{
          if   (size!=right.size)
          return   false;
         
          for(int   i=0;i <size;i++)
              if(ptr[i]!=right.ptr[i])
                return   false;
             
          return   true;
}

int   &array::operator[](int   subscript)
{
        assert(0 <=subscript   &&   subscript <size);
        return   ptr[subscript];
}


istream   &operator   > > (istream   &input,   array   &a)
{
          for(int   i=0;i <a.size;   i++)
                input> > a.ptr[i];
          return   input;
}

ostream   &operator   < <(ostream   &output,const   array   &a)
{
          int   i;
         
          for(i=0;i <a.size;i++)
          {  
              output < <setw(12) < <a.ptr[i];
              if((i+1)%4==0)
                  output < <endl;
          }
         
          if(i%4!=0)
                  output < <endl;
                 
      return   output;
}

int   main()
{
        array   a(7);
        cin> > a;
        cout < <a;
        cout < <a.getsize();
        system("pause");
        return   0;
}
发表于:2008-01-14 08:55:301楼 得分:0
array::array(int   as)
这个构造函数没有给ptr分配内存
发表于:2008-01-14 09:03:102楼 得分:0
array::array(int       as)  
{  
            size=(as>   0?       as:10);  
            assert(ptr!=0);  
            ++arraycount;  
            for(int       i=0;i   <size;i++)  
                    ptr[i]=0;  
}  
==》
array::array(int       as)  
{  
            size=(as>   0?       as:10);  
            assert(ptr!=0);  
            ++arraycount;  

            ptr=new   int[size];     //
            for(int       i=0;i   <size;i++)  
                    ptr[i]=0;  
}  
发表于:2008-01-14 20:08:213楼 得分:0
谢谢你的回答
还有这个论坛   如何给分啊
我记得以前我就问过  
不过现在还是   不明白啊
发表于:2008-01-14 21:05:054楼 得分:0
管理帖子


快速检索

最新资讯
热门点击