1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > C++:向函数传递对象(对象 对象指针 对象引用)

C++:向函数传递对象(对象 对象指针 对象引用)

时间:2023-05-29 03:35:03

相关推荐

C++:向函数传递对象(对象 对象指针 对象引用)

3.5.1 使用对象作为函数参数,其方法与传递基本类型的变量相同

//例3.21 使用对象作为函数参数#include<iostream>using namespace std;class A{public:A(int n){t = n;}void set_i(int n){t = n;}int get_i(){return t;}private:int t; };void sqrt_it(A obj2) //对象obj2作为函数sqrt_it的形参,接收传来的实参对象obj1 {obj2.set_i(obj2.get_i()*obj2.get_i());cout<<"在函数sqrt_it内,形参对象的obj2的数据成员t的值为:"<<obj2.get_i();cout<<endl;}int main(){A obj1(10);cout<<"调用函数sqrt_it前,实参对象obj1的数据成员t的值为:"<<obj1.get_i();cout<<endl;sqrt_it(obj1); //调用函数sqrt_it,实参obj1传给形参obj2 cout<<"调用函数sqrt_it后,实参对象obj1的数据成员t的值为:"<<obj1.get_i();cout<<endl;return 0; }/*程序运行结果如下:调用函数sqrt_it前,实参对象obj1的数据成员t的值为:10在函数sqrt_it内,形参对象obj2的数据成员t的值为:100调用函数sqrt_it后,实参对象obj1的数据成员t的值为:10*/

3.5.2 使用对象指针作为函数参数,可以实现"传址调用"

//例3.22 使用对象指针作为函数参数#include<iostream>using namespace std;class A{public:A(int n){t = n;}void set_i(int n){t = n;}int get_i(){return t;}private:int t; };void sqrt_it(A *obj2) //对象指针obj2作为函数sqrt_it的形参,接收传来的实参对象obj1地址 { //也即指针obj2指向存放在obj1的地址内的值 obj2->set_i(obj2->get_i()*obj2->get_i());//(*obj2).set_i((*obj2).get_i()*(*obj2).get_i());cout<<"在函数sqrt_it内,形参对象的obj2的数据成员t的值为:"<<obj2->get_i();cout<<endl;}int main(){A obj1(10);cout<<"调用函数sqrt_it前,实参对象obj1的数据成员t的值为:"<<obj1.get_i();cout<<endl;sqrt_it(&obj1); //调用函数sqrt_it,将实参对象obj1的地址传给形参指针变量obj2cout<<"调用函数sqrt_it后,实参对象obj1的数据成员t的值为:"<<obj1.get_i();cout<<endl;return 0; }/* 程序运行结果如下:调用函数sqrt_it前,实参对象obj1的数据成员t的值为:10在函数sqrt_it内,形参对象的obj2的数据成员t的值为:100调用函数sqrt_it后,实参对象obj1的数据成员t的值为:100*/

3.5.3 使用对象引用作为函数参数(兼具对象指针的优点,而且更简单、更直接)

//例3.23 使用对象引用作为函数的参数#include<iostream>using namespace std;class A{public:A(int n){t = n;}void set_i(int n){t = n;}int get_i(){return t;}private:int t; };void sqrt_it(A &obj2) //对象obj2作为函数sqrt_it的形参,用obj2引用对象obj1 {obj2.set_i(obj2.get_i()*obj2.get_i());cout<<"在函数sqrt_it内,形参对象的obj2的数据成员t的值为:"<<obj2.get_i();cout<<endl;}int main(){A obj1(10);cout<<"调用函数sqrt_it前,实参对象obj1的数据成员t的值为:"<<obj1.get_i();cout<<endl;sqrt_it(obj1); //调用函数sqrt_it,实参obj1传给形参obj2 cout<<"调用函数sqrt_it后,实参对象obj1的数据成员t的值为:"<<obj1.get_i();cout<<endl;return 0; }/*程序运行结果如下:调用函数sqrt_it前,实参对象obj1的数据成员t的值为:10在函数sqrt_it内,形参对象的obj2的数据成员t的值为:100调用函数sqrt_it后,实参对象obj1的数据成员t的值为:100 */

总结:

1、使用对象作为函数参数,形参和实参是不同的对象,它们所占地址空间不同,因此,形参

的改变,并不影响实参的值。

2、使用对象指针作为函数参数中,所谓"传址调用",就是在函数调用时使实参对象和形参对象

的地址传递给函数,形参和实参都指向同一个地址值,此时在函数中对形参对象的修改将影

响调用该函数的实参对象本身。

3、使用对象引用作为函数的参数,所谓"对象引用",就是对实参对象换了个别名,实际上它们

仍是同一个对象,所以,所谓的形参(别名对象)值的的改变,直接就是实参对象值的改变。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。