1. 对象指针作函数的参数 使用对象指针作为函数参数要经使用对象作函数参数更普遍一些。因为使用对象指针作函数参数有如下两点好处: (1) 实现传址调用。可在被调用函数中改变调用函数的参数对象的值,实现函数之间的信息传递。 (2) 使用对象指针实参仅将对象的地址值传给形参,而不进行副本的拷贝,这样可以提高运行效率,减少时空开销。 当形参是指向对象指针时,调用函数的对应实参应该是某个对象的地址值,一般使用&后加对象名。下面举一例子说明对象指针作函数参数。 #include <iostream> using namespace std; class M { private: public: M() { x = y = 0; } M(int i, int j) { x = i; y = j; } void copy(M* m); void setxy(int i, int j) { x = i; void print() { }; void M::copy(M *m) { x = m -> x; y = m -> y; } void fun(M m1, M* m2); void main() { M p(5, 7) , q; q.copy(&p); fun(p, &q); p.print(); q.print(); } void fun(M m1, M* m2) { m1.setxy(12, 15); m2 -> setxy(22,25); } 输出结果为: 5,7 22,25 从输出结果可以看出,当在被调用函数fun中,改变了对象的数据成员值[m1.setxy(12, 15)]和指向对象指针的数据成员值[m2->setxy(22, 25)]以后,可以看到只有指向对象指针作参数所指向的对象被改变了,而另一个对象作参数,形参对象值改变了,可实参对象值并没有改变。因此输出上述结果。 2. 对象引用作函数参数 在实际中,使用对象引用作函数参数要比使用对象指针作函数更普遍,这是因为使用对象引用作函数参数具有用对象指针作函数参数的优点,而用对象引用作函数参数将更简单,更直接。所以,在C++编程中,人们喜欢用对象引用作函数参数。现把刚才的例子稍作改动,说明对象引用作函数参数的格式。 #include <iostream> using namespace std; class M { private: int x, y; public: M() { x = y = 0; } M(int i, int j) { x = i; y = j; } void copy(M &m); void setxy(int i, int j) { x = i; y = j; } void print() {cout<<x<<","<<y<<endl; } }; void M::copy(M &m) { x=m.x; x=m.y; } void fun(M m1, M &m2); void main() { M p(5, 7), q; q.copy(p); fun(p, q); p.print(); q.print(); } void fun(M m1, M &m2) { m1.setxy(12, 15); m2.setxy(22, 25); } 该例子与上面的例子输出相同的结果,只是调用时的参数不一样。 this指针 using namespace std;
|
|