cyshhm 发表于 2013-11-18 00:05:32

终于发现小甲鱼错误啦! 哈哈哈!!!

本帖最后由 cyshhm 于 2013-11-18 00:07 编辑

//第36课 第二个例子!
#include<iostream>
#include<string>

class abc
{
public:
      abc(int* bb);
      abc(const abc& a);
      ~abc();

      abc &operator=(const abc &a);
      void dy();
private:
      int *bb;
};

abc::abc(int* bb)
{
      std::cout<<"进入 j基类j 构造器\n";
      this->bb=bb;
      std::cout<<"离开 j基类j 构造器\n";
}

abc::abc(const abc &c)
{
      std::cout<<"进入 f副本f 构造器\n";
      bb=new int;//在这之前没个给 bb指向的东西没意义 开辟内存让bb指向
      //小甲鱼你的程序是没这句的 (*^__^*) 嘻嘻…… 没上门这句 那么 等会给bb指向的内存赋值的时候 就会错误(*^__^*)
      *this=c;//重载了=号 进入 =号重载
      std::cout<<"离开 f副本f 构造器\n";
}

abc::~abc()
{
      std::cout<<"进入基类 xx析xx 构造器\n";
      delete bb;
      std::cout<<"离开基类 xx析xx 构造器\n";
}

abc& abc::operator =(const abc& a)
{
      std::cout<<"进入 =赋值= 语句重载\n";
      if(this!=&a)
      {
            *bb = *a.bb;
      }
      else
      {
            std::cout<<"赋值号两边为同一对象,不做处理\n";
      }

      std::cout<<"离开 =赋值= 语句重载\n";

      return *this;
}

void abc::dy()
{
      std::cout<<bb<<""<<*bb<<std::endl;
}

int main()
{
      abc a1(new int(1));
      abc a2(new int(2));
      a2=a1;

      a1.dy();
      a2.dy();

      std::cout<<"----------------------------------\n";

      abc a3(new int(3));
      abc a4=a3;

      a3.dy();
      a4.dy();

      std::cout<<"----------------------------------\n";

      abc a5(new int(5));
      a5=a5;
      a5.dy();

      return 0;
}

cyshhm 发表于 2013-11-18 21:54:40

没人顶啊!?????
页: [1]
查看完整版本: 终于发现小甲鱼错误啦! 哈哈哈!!!