前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++参数传递

C++参数传递

作者头像
卡尔曼和玻尔兹曼谁曼
发布2019-01-25 15:29:16
8020
发布2019-01-25 15:29:16
举报

C++和Java、C#语言在参数传递的时候,最大的不同就是在 C++ 中,除非显式通过指针或引用传递,否则所有变量都通过值传递。在 C# 中,除非显式通过具有 ref 或 out 参数修饰符的引用传递,否则类通过引用传递,而结构通过值传递。Java中类通过引用传递,基本数据类型通过值传递。

具体说来:C++中每次调用函数时,都会重新创建该函数所有的形参,此时所传递的实参将会初始化对应的形参。 形参的初始化与变量的初始化一样:如果形参具有非引用类型,则复制实参的值,如果形参为引用类型,则它只是实参的别名。 非引用形参表示对实参的局部副本。对这类形参的修改仅仅改变了局部副本的值。一旦函数执行结束,这些局部变量的值也就没有了。

下面通过实例进行验证:

定义一个Person类

头文件声明

代码语言:javascript
复制
#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();
};

源文件定义

代码语言:javascript
复制
#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;
}

测试程序:

代码语言:javascript
复制
#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;
}

运行结果:

可以发现,不管是基本数据类型,对象,还是指针都是指传递,除非声明了引用,进行引用传递。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014年03月19日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档