|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 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;
} |
|