一、对象作为函数的参数
对象也可以作为函数的参数传递给函数,其转递方法与传递其他类型的数据一样,可采用值传递和地址传递两种方法。
值传递时是把对象的拷贝而不是本身传递给函数,函数中对参数对象的任何修改都不会影响调用该函数的对象本身;
而地址传递时,调用该函数的对象与参数对象共用同一个地址,所以,函数对参数对象的任何修改都会影响调用该函数的对象本身。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
#include<iostream>
using
namespace
std;
class
Tr{
public
:
//Tr(int n):i(n) //构造函数最好这么写
//{}
Tr(
int
n)
{
i=n;
}
void
set_i(
int
n)
{i=n;}
int
get_i()
{
return
i;}
private
:
int
i;
};
void
sqr_it1(Tr ob)
{
ob.set_i(ob.get_i()*ob.get_i());
cout<<
"在函数sqr_it1内,形参对象obj的数据成员i="
<<ob.get_i();
cout<<endl;
}
void
sqr_it2(Tr *obj)
{
obj->set_i(obj->get_i()*obj->get_i());
cout<<
"在函数sqr_it2内,形参对象obj的数据成员i="
<<obj->get_i();
cout<<endl;
}
int
main()
{
Tr obj(10);
cout<<
"调用sqr_it前,实参对象obj的数据成员i="
<<obj.get_i()<<endl;
sqr_it1(obj);
cout<<
"调用sqr_it1后,实参对象obj的数据成员i="
<<obj.get_i()<<endl;
sqr_it2(&obj);
cout<<
"调用sqr_it2后,实参对象obj的数据成员i="
<<obj.get_i()<<endl;
return
0;
}
|
调用sqr_it前,实参对象obj的数据成员i=10
在函数sqr_it1内,形参对象obj的数据成员i=100
调用sqr_it1后,实参对象obj的数据成员i=10
(此时,由于是以值传递,obj的数据成员i没有变化,还是原先的10)
在函数sqr_it2内,形参对象obj的数据成员i=100
调用sqr_it2后,实参对象obj的数据成员i=100
(此时,由于是以地址传递,obj的数据成员i发生变化,为sqr_it2中的值100)
应该还可以按照引用来传递参数,当不能改变参数是最好用const修饰;
二、二维数组作为函数的参数
http://blog.csdn.net/jatix/archive/2004/08/29/88150.aspx)。
PS:非要使用引用的话,可以用二维向量代替数组实现,以下为代码:
注意二维向量声明时的写法:vector<vector<int> > migong(8);//注意空格!!!
欢迎指正!