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、使用对象引用作为函数的参数,所谓"对象引用",就是对实参对象换了个别名,实际上它们
仍是同一个对象,所以,所谓的形参(别名对象)值的的改变,直接就是实参对象值的改变。
C++:向函数传递对象(对象、对象指针、对象引用)相关推荐
- js中函数传递参数,究竟是值传递还是引用传递?
记住真理: js函数传递参数,不管是简单数据类型,还是引用数据类型,都是值传递!! 下面是js红包书里面的例子: function setName(obj) { obj.name = "Ni ...
- C++ 笔记(18)— 类和对象(this 指针、指向类的指针、类静态成员变量和函数)
1. this 指针 在 C++ 中,每一个对象都能通过 this 指针来访问自己的地址. this 指针是所有成员函数的隐含参数.因此,在成员函数内部,它可以用来指向调用对象. 友元函数没有 thi ...
- C++_向函数传递对象
向函数传递对象 1. 使用对象作为函数参数 对象可以作为参数传递给函数,其方法与传递其他类型的数据相同. 在向函数传递对象时,是通过传值调用传递给函数的. 因此,函数中对对象的任何修改均不影响调用该函 ...
- Go 学习笔记(34)— Go 方法声明、方法调用、方法值、方法表达式、切片对象方法、指针对象方法
1. 方法声明 Go 语言的方法非常纯粹, 可以看作特殊类型的函数, 其显式地将对象实例或指针作为函数的第一个参数, 并且参数名可以自己指定, 而不强制要求一定是 this 或 self .这个对象实 ...
- (重要)java都是值传递,与对象形参所指向的对象改变,其实参所指向的对象也相应改变并不矛盾(2011年9.30日一天写的两个程序的总结结果)...
1.0建立二叉树的代码,在java中必须创建二叉树的方法必须用返回值,因为不存在c语言中的引用传递,在java中只有值传递 代码1为正确,代码2(没有使用返回值)为错误.那么为什么之前的例子中将对象作 ...
- java中形参不可以是对象吗_(重要)java都是值传递,与对象形参所指向的对象改变,其实参所指向的对象也相应改变并不矛盾(2011年9.30日一天写的两个程序的总结结果)...
1.0建立二叉树的代码,在java中必须创建二叉树的方法必须用返回值,因为不存在c语言中的引用传递,在java中只有值传递 代码1为正确,代码2(没有使用返回值)为错误.那么为什么之前的例子中将对象作 ...
- 22.类对象和类指针
Student a; s.setName("A");//Studeng *b = new Student();Student *b;b = new Student();b-> ...
- 类对象和类指针深入分析与对比
1.前言 Student a; s.setName("A");//Studeng *b = new Student(); Student *b; b = new Student() ...
- Py函数直接传入root是啥意思_阿里云python课程笔记(四):函数amp;类和对象
接阿里云python课程笔记(三):数据结构 我们讨论一下python中的深拷贝和浅拷贝 dic1 = {'user': 'lsgogroup', 'num': [1, 2, 3]}# 引用对象dic ...
- 类和对象——对象特性——this指针的用途
在C++中成员变量和成员函数是分开存储的.每一个非静态成员函数只会诞生一份函数实例,也就是说多个同类型的对象会共用一块代码. 那么问题是:这一块代码是如何区分是哪个对象调用自己的呢? C++通过提供特 ...
最新文章
- 隐马尔可夫模型 HMM 原理及实现
- 工作322:uni-扩展运算符实现拼接合并操作
- linux将一个文件的内容复制到另一个新的文件
- Android studio gradle 无法获取 pom文件
- Tensorflow 2.1 迁移学习 基于VGG
- extract提取返回结果中的内容_httprunner如何提取数据串联上下游接口
- 判断字符串是否是空格
- Linux命令解释之cp
- keras中TimeDistributed的用法
- Java编程工具之 word转pdf
- 【新书推荐】【2020】卫星通信(第三版)
- 云计算机平台搭建,搭建云计算平台的步骤
- 如何在oracle官网下载jdk11,在linux上使用wget从oracle官网下载jdk11
- Mac动态桌面壁纸Dynamic Wallpaper惊艳你的桌面
- MFC控件自适应调整大小
- 互联网金融涌动下的冲动与借债
- 山东农业大学考研计算机专业分数,山东农业大学研究生分数线
- python中response是什么意思_对python中各个response的使用说明
- 移动直播技术秒开优化经验(含PPT)
- 车载应用--AUXIN 利用 surfaceView 预览 Camera 数据
热门文章
- JavaWeb请求的重定向与转发:getRequestDispatcher()的forward方法,sendRedirect方法,以及重定向与转发的区别
- 爱情指数测试脸型软件,心理测试:你和谁的脸型最像?测出你的幸运指数是多少!...
- java 内省 反射_java 反射与内省
- 凸优化第七章统计估计 7.3最优检测器设计及假性检验
- 在Java中如何遍历Map对象
- sublime text 2/3 快捷键汇总
- servlet后端连接 微信小程序与_微信小程序授权登录
- 使用ppmap检测和利用XSS漏洞
- Tomcat8+redis实现session共享
- zoj 3599 Game 博弈论