C++之向函数传递对象

对象作为函数的参数和返回值的传递方式有三种:值传递、指针转递、和引用传递

1、值传递

当对象作为值传递时,将创建该对象副本,并将副本传递给函数。在函数内部对对象的任何修改都不会影响原始对象。

void func(SomeClass obj) {
    // 对obj进行操作,但不会影响原始对象
}
#include <iostream>
#include <string>
using namespace std;
class Person
{
public:
	string name;
	int age;
	void makeOlder(Person person);
};
void makeOlder(Person person) {
		person.age += 1;
		cout << person.name << "is now " << person.age << "year old" << endl;
	}
int main() {
	Person p;
	p.name = "张三";
	p.age = 20;
	makeOlder(p);
	cout << p.name << "is till " << p.age << "year old" << endl;
}

输出:

从运行结果可以看出对象作为函数参数,形参对象的值的改变不会影响到实参对象。

2、引用传递、指针传递

当对象作文引用传递时,函数接收一个指向原始对象的引用。

当对象作为指针传递时,函数接收一个指向对象的指针。

在函数内部对对象所指向的任何内容的修改都将影响原始对象。

#include <iostream>
using namespace std;
class Square
{
private:
	double length;
public:
	Square(double len);
	void Add(Square* s);
	void Output();
};
Square::Square(double len) :length(len) {

}
void Square::Add(Square* s)
{
	s->length = s->length + 1.0;
}
void Square::Output()
{
	cout << "Square Area:" << length * length << endl;
}
int main() {
	Square s(2.5);
	cout << "add before" << endl;
	s.Output();
	s.Add(&s);
	cout << "add after" << endl;
	s.Output();
	return 0;
}

 可见当对象作为指针和引用传递时,形参对象的改变将会影响到实参对象。

3、三种传递方式比较

1)、值传递是单向的,形参的改变并不能引起实参的改变。而指针和引用传递是双向的,开以将改变由形参“传给”实参。

2)、引用是C++中的概念。初学者容易把引用和指针混淆一起。int m;int &n = m; n相当于m的别名或者绰号,对n的任何操作就是对m的操作。所以n既不是m的拷贝,也不是指向m的指针,其实n就是m本身。引用的主要功能是传递函数的参数和返回值。

实际上"引用"可以做的任何事情"指针"也都能够做。

3)、指针能够毫无约束地操作内存中的任何东西。指针虽然功能强大,但是用起来十分危险,所以如果的确只需要借用一下某个对象的“别名”,那么就用“引用”,而不要用“指针”,以免发生意外。

4)、使用引用作为函数参数与使用指针作为函数参数相比,前者更容易使用、更清晰,而且当参数传递的数据量较大时,引用传递参数的效率高且所占存储空间更小。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值