C++参数传递
来源:互联网 发布:佛山市软件行业协会 编辑:程序博客网 时间:2024/06/15 18:24
C++和Java、C#语言在参数传递的时候,最大的不同就是在 C++ 中,除非显式通过指针或引用传递,否则所有变量都通过值传递。在 C# 中,除非显式通过具有 ref 或 out 参数修饰符的引用传递,否则类通过引用传递,而结构通过值传递。Java中类通过引用传递,基本数据类型通过值传递。
具体说来:C++中每次调用函数时,都会重新创建该函数所有的形参,此时所传递的实参将会初始化对应的形参。
形参的初始化与变量的初始化一样:如果形参具有非引用类型,则复制实参的值,如果形参为引用类型,则它只是实参的别名。
非引用形参表示对实参的局部副本。对这类形参的修改仅仅改变了局部副本的值。一旦函数执行结束,这些局部变量的值也就没有了。
下面通过实例进行验证:
定义一个Person类
头文件声明
#include <string>using std::string;class Person{private:string name;string gender;int age;public:Person();Person(string name, string gender, int age);~Person();string getName();void setName(string name);string getGender();void setGender(string gender);int getAge();void setAge(int age);void printInfo();};源文件定义
#include <iostream>#include "person.h"using namespace std;Person::Person(){}Person::Person( string name, string gender, int age ){this->name = name;this->gender = gender;this->age = age;}Person::~Person(){}string Person::getName(){return this->name;}void Person::setName( string name ){this->name = name;}string Person::getGender(){return gender;}void Person::setGender( string gender ){this->gender = gender;}int Person::getAge(){return age;}void Person::setAge( int age ){this->age = age;}void Person::printInfo(){cout<<"Name:"<<this->name<<endl;cout<<"Gender:"<<this->gender<<endl;cout<<"Age:"<<this->age<<endl;}
测试程序:
#include <iostream>#include "person.h"using std::cout;using std::endl;template <typename T>//使用了模板的方法,用于两个数据的交互void swap(T obj1, T obj2){T temp;temp = obj1;obj1 = obj2;obj2 = temp;}void swap(double *obj1, double *obj2){double temp;temp = *obj1;*obj1 = *obj2;*obj2 = temp;}int main(){double num1 = 12, num2 = 0;cout<<"一般数据类型进行交换:"<<endl;cout<<num1<<" "<<num2<<endl;swap(num1,num2);cout<<num1<<" "<<num2<<endl;Person p1 = Person("tanzhenyu","male",24);Person p2 = Person("zhoujielun","male",34);cout<<"对象类型进行交换:"<<endl;p1.printInfo();p2.printInfo();swap(p1,p2);p1.printInfo();p2.printInfo();double *pnum1 = &num1, *pnum2 = &num2;cout<<"指针类型进行交换(注意这里不是交换指针,而是交换指针指向的值):"<<endl;cout<<num1<<" "<<num2<<endl;swap(pnum1,pnum2);cout<<num1<<" "<<num2<<endl;Person &pn1 = p1, & pn2 = p1;cout<<"引用类型进行交换:"<<endl;pn1.printInfo();pn2.printInfo();swap(pn1,pn2);pn1.printInfo();pn2.printInfo();return 0;}
运行结果:
可以发现,不管是基本数据类型,对象,还是指针都是指传递,除非声明了引用,进行引用传递。
0 0
- C/C++--参数传递
- C#中的参数传递
- C#中的参数传递
- C#中的参数传递
- C#中的参数传递
- C#参数传递
- c语言参数传递
- C语言参数传递
- c#--参数传递
- C参数传递
- C语言参数传递
- C语言参数传递
- C函数参数传递
- C指针参数传递
- C/C++ 参数传递
- C语言参数传递
- C参数传递
- C语言参数传递
- iOS 7.1下itms-services在线安装失败的解决方法
- linux下双网卡绑定
- IAR STM32 函数和变量的绝对地址定位
- vs macro shortcuts
- Android UiAutomator 实践之一
- C++参数传递
- VS2010/MFC编程入门之二十四(常用控件:组合框控件Combo Box)
- MongoDB2.4.3在Ubuntu13.04的安装
- C++中的explicit
- linux下网卡相关命令
- 第一篇技术博客(Java 多态)
- libevent介绍及示例
- Java NIO原理图文分析
- UVA 1001 Simple calculations