函数参数传递与构造函数和析构函数
2005-08-06 15:49
351 查看
#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
引用传递没有调用构造函数和析构函数
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
引用传递没有调用构造函数和析构函数
相关文章推荐
- C++构造函数、拷贝构造函数、赋值运算符漫谈(一)——函数参数传递
- 【Python】构造函数、析构函数与可变参数传递
- 关于C语言中函数调用和参数传递机制的探讨--汇编
- C#利用lambda表达式将函数作为参数或属性跨类传递
- 不要在构造函数或析构函数里调用虚函数
- 给数组对象sort函数传递比较函数参数的一点反思
- C语言技巧:怎样把数组作为参数传递给函数?
- Delphi过程函数传递参数的几种方式
- 实现MyString类--构造函数、拷贝构造函数、析构函数、赋值函数、操作符重载函数
- Python函数的参数传递(3)
- JS中把函数作为另一函数的参数传递方法(总结)
- JS的setTimeout()函数传递参数
- go语言将函数作为参数传递
- Perl函数参数中传递数组和引用的使用
- c++之指针作为函数参数传递的问题
- Python中函数的参数传递与可变长参数
- python函数的参数传递问题---传值还是传引用?
- c 语言 二维数组的函数参数传递的问题
- Python的函数参数传递:传值?引用?
- virtual与构造/析构函数(内联函数,构造函数,静态成员函数不能为virtual函数)