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毫秒)
相关文章推荐
- C/C++函数参数,传值域传址的区别
- c++函数中的 指针参数跟地址参数区别
- c++异常参数传递和普通函数参数传递的区别。
- C++ * a和*&a作为函数的参数时有什么区别
- C/C++函数参数,传值域传址!!!
- C++函数参数中*&与*的区别
- C++函数参数中引用和指针区别
- C++之函数参数的值传递、指针传递以及引用传递的区别和联系
- C/C++的区别(默认值、内联函数、函数重载、const、引用、参数、返回值)
- [C++] 变量、指针、引用作函数参数的区别
- C++的基础知识(十一)--数组做函数参数、数组名a与&a区别、数组名a的"数据类型"
- C++中几个输入函数的用法和区别
- C++中二位数组作为函数参数
- 第二周 项目1-C/C++语言中函数参数传递的三种方式
- C++.net 定义类 将类对象作为函数参数传入另一个类 出现错误
- 【转】retrieveend 事件中的rowcount参数与rowcount()函数的区别
- C/C++中函数参数传递
- 【C++基础之二十】可变参数的函数
- c++成员函数的重载、覆盖、隐藏区别
- 深入理解C++中函数参数——传值与传址详解