您的位置:首页 > 编程语言 > C语言/C++

C/C++函数参数,传值域传址的区别!!!

2010-05-30 15:43 357 查看
/*
* File:   main.cpp
* Author: Vicky
*
* Created on 2010年5月8日, 下午2:47
*/

#include <iostream>
using namespace std;

class A{
public:
A(){
cout << "执行构造函数创建一个对象" << endl;
}

A(A&){
cout << "执行拷贝函数拷贝一个对象" << endl;
}

~A(){
cout << "执行析构函数删除一个对象" << endl;
}
};

void func(A a){
cout << "调用一个传值函数" << endl;
}

void func2(A &a){
cout << "调用一个传址函数" << endl;
}

A getA(A a){
return a;
}

A getA2(A &a){
return a;
}

/**
* 同getA4
*/
A* getA3(A &a){
return &a;
}

/**
* 同getA3
*/
A* getA4(A *a){
return a;
}

/*
* 按值传递的缺点...当创建一个新的对象之后,如果按值传递
* 将复制构造函数创建对象的副本,副本在使用完成之后,又会执行析构函数删除该副本!
*/
int main(int argc, char** argv) {

A a;
func(a);
func(a);

cout << "-------" << endl;

func2(a);
func2(a);

cout << "-------" << endl;

getA(a); // 将拷贝2个对象和删除2个对象,1个对象是作为参数传递的,另外一个对象是作为值返回的!

cout << "-------" << endl;

getA2(a); // 将拷贝1个对象和删除1个对象,该对象是作为值返回的!

cout << "-------" << endl;
getA3(a); // 将不拷贝a的对象做为参数,也不会拷贝a的对象作为返回值(包括删除)!
getA4(&a);

return (EXIT_SUCCESS);
}


执行构造函数创建一个对象
执行拷贝函数拷贝一个对象
调用一个传值函数
执行析构函数删除一个对象
执行拷贝函数拷贝一个对象
调用一个传值函数
执行析构函数删除一个对象
-------
调用一个传址函数
调用一个传址函数
-------
执行拷贝函数拷贝一个对象
执行拷贝函数拷贝一个对象
执行析构函数删除一个对象
执行析构函数删除一个对象
-------
执行拷贝函数拷贝一个对象
执行析构函数删除一个对象
-------
执行析构函数删除一个对象

运行成功(总计时间: 255毫秒)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: