拷贝构造函数

 

 #include <iostream.h>
class human
{
public:
human(){ human_num++;};
static int human_num;
~human()
{
human_num--;
print();
}
void print()
{
cout<<"human num is: "<<human_num<<endl;
}
protected:
private:
};
int human::human_num = 0;
human f1(human x)
{
x.print();
return x;
}
int main(int argc, char* argv[])
{
human h1;
h1.print();
human h2  = f1(h1);//调用拷贝构造函数
h2.print();
return 0;
}
输出:
1
1
0
0
-1
-2

调用拷贝构造函数的时机:

1) 一个对象以值传递的方式传入函数体。
2) 一个对象以值传递的方式从函数返回。
3) 一个对象需要通过另外一个对象进行初始化。

 

  class   stu    
  {  
  int   a;  
  public:  
  stu(int   x=0){a=x;cout<<"stu的普通构造函数/n";}    
  stu(const   stu   &ob){a=ob.a;cout<<"stu的拷贝构造函数调用/n";}  
  void   operator   =   (stu   ob){a=ob.a;cout<<"=运算符重载函数被调用/n";}  
  ~stu(){}  
  };  
  class   atm  
  {  
  stu   p;  
  int   b;  
  public:  
  atm(stu   m,int   n){p=m;b=n;}  
   
  ~atm(){}  
  };  
  void   main()  
  {  
  stu   stu1(100);  
  atm   ob(stu1,200);  
  }  

 

这个题目看来,如果一个函数的参数是按值传递的,那么就一定会调用拷贝构造函数,包括构造函数如果也是按值传递,也会调用拷贝构造函数。  
   
      你这里的构造函数  
        atm(stu   m,int   n){p=m;b=n;}       和   重载函数  
        void   operator   =   (stu   ob){a=ob.a;cout<<"=运算符重载函数被调用/n";}  
      都是按值传递的,所以会调用两次拷贝构造函数,  
   
      我在vc下面测试得出得结论。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值