函数参数传递与构造函数和析构函数

博客展示了一段C++代码,定义了一个类myclass,包含构造和析构函数。代码演示了将类对象传递给函数时,分别采用值传递和引用传递的情况。值传递会产生对象拷贝,拷贝撤销时调用析构函数;引用传递不调用构造和析构函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<iostream.h>

class myclass

{

public:

       myclass(int n);

       ~myclass();

      

       void set_i(int n) { i=n; }

       int get_i() { return i; }

private:

       int i;

};

myclass::myclass(int n)

{

       i=n;

       cout<<"Constructing "<<i<<endl;

}

myclass::~myclass()

{

       cout<<"Destroying "<<i<<endl;

}

 

void fun(myclass obj)//1值传递

//void fun(myclass &obj)//2引用传递

{

       obj.set_i(2);

       cout<<"This is local i:"<<obj.get_i();

       cout<<endl;

}

 

main()

{

       myclass obj(1);

       fun(obj);

       cout<<"This is in main:";

       cout<<obj.get_i()<<endl;

      

       return 0;

}

结果1(值传递):
Constructing 1
This is local i:2
Destroying 2
This is in main:1
Destroying 1
当由于对象要传给函数而产生对象的拷贝时,不调用对象的构造函数,
但当函数内部的对象的拷贝撤消时,要调用对象的析构函数。


结果2(引用传递):
Constructing 1
This is local i:2
This is in main:2
Destroying 2       //1
已经改变成了2
引用传递没有调用构造函数和析构函数

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值