向函数传递对象

1. 使用对象作为函数参数

对象可以作为参数传递给函数,其方法与传递其他类型的数据相同

在向函数传递对象时,是通过传值调用传递给函数的。

因此,函数中对对象的任何修改均不影响调用该函数的对象本身

例3.11 使用对象作为函数参数。
#include<iostream.h>
class aClass{
public:aClass(int n) { i=n; }void set(int n){ i=n; }int get( ){ return i; }
private:int i;
};
void sqr(aClass ob)
{ob.set(ob.get()*ob.get());cout<<"copy of obj has i value of ";cout<<ob.get()<<"\n";
}
main()
{aClass obj(10);sqr(obj);cout<<"But, obj.i is unchanged in main:";cout<<obj.get( ); return 0;
}
copy of obj bas i value of 100
But, obj.i is unchanged in main∶10

2. 使用对象指针作为函数参数

对象指针可以作为函数的参数,使用对象指针作为函数参数可以实现传址调用,即可在被调用函数中改变调用函数的参数对象的值,实现函数之间的信息传递

同时使用对象指针实参仅将对象的地址值传给形参,而不进行副本的拷贝,这样可以提高运行效率,减少时空开销

当函数的形参是对象指针时,调用函数的对应实参应该是某个对象的地址值

例3.12 使用对象指针作为函数参数
#include<iostream.h>
class aClass {
public:aClass(int n) { i=n; }void set(int n){ i=n; }int get(){ return i;}
private:int i;
};
void sqr(aClass *ob)
{ob->set(ob->get() * ob->get());cout<<"Copy of obj has i value of ";cout<<ob->get()<<"\n";
}
main()
{aClass obj(10);sqr(&obj);cout<<"Now, obj.i in main() has been changed :";cout<<obj.get() <<"\n"; return 0;
}

3. 使用对象引用作为函数参数

使用对象引用作为函数参数不但具有用对象指针作函数参数的优点,而且用对象引用作函数参数将更简单、更直接

例3.13 使用对象引用作为函数参数
#include<iostream.h>
class aClass {
public:aClass(int n) { i=n; }void set(int n) { i=n; }int get() { return i;}
private:int i;
};
void sqr(aClass& ob)
{ob.set(ob.get() * ob.get());cout<<"Copy of obj has i value of ";cout<<ob.get()<<"\n";
}
main()
{aClass obj(10);sqr(obj);cout<<"Now, obj.i in main() has been changed :";cout<<obj.get() <<"\n";return 0;
}

转载于:https://www.cnblogs.com/whale90830/p/10536281.html

C++_向函数传递对象相关推荐

  1. python参数传递方法_深入理解python中函数传递参数是值传递还是引用传递

    python 的 深入理解python中函数传递参数是值传递还是引用传递 目前网络上大部分博客的结论都是这样的: Python不允许程序员选择采用传值还是传 引用.Python参数传递采用的肯定是&q ...

  2. 经典 Python参数传递采用的肯定是“传对象引用”的方式。相当于传值和传引用的一种综合。如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值--相当于通过“传引用”来传递对象

    python不允许程序员选择采用传值还是传引用.Python参数传递采用的肯定是"传对象引用"的方式.这种方式相当于传值和传引用的一种综合.如果函数收到的是一个可变对象(比如字典或 ...

  3. 传递对象_看懂Xlua实现原理——从宏观到微观(1)传递c#对象到Lua

    CSDN 我们要解决什么问题? 为了使基于unity开发的应用在移动平台能够热更新,我们嵌入了Lua虚拟机,将需要热更新的逻辑用lua实现.c#通过P/Invoke和lua交互(lua由ANSI C实 ...

  4. java的构造函数格式_来自模板化对象的Java 8函数构造函数

    我正在使用 Eclipse Luna Service Release 2(4.4.2),Java 8 u51. 我正在尝试创建一个方法,该方法将基于另一个方法参数创建传递对象的实例.原型简化为 pub ...

  5. php变量在html调用函数调用,PHP_如何在html标记中调用的函数里传递对象,最近使用jquery结合Ajax开发一个 - phpStudy...

    如何在html标记中调用的函数里传递对象 最近使用jquery结合Ajax开发一个中小型网站应用.在后台管理中要使用Ajax调用系统功能,根据Ajax的返回结果,使用jQuery对前台页面进行操作. ...

  6. url中传递对象参数_在URL参数中传递复杂对象

    url中传递对象参数 假设您想传递原始数据类型,例如复杂的Java对象 java.util.Data,java.lang.List,泛型类,数组以及通过URL参数所需的所有内容,以便在页面加载后在任何 ...

  7. python 嵌套函数过多_嵌套函数的性能开销是多少?

    性能惩罚肯定存在.如果函数是在对另一个函数的调用中创建的,那么每次调用外部函数时都会创建函数对象.但这种惩罚很小,而且通常可以忽略不计.尤其要考虑到一个显而易见的事实:在大多数情况下,只有当嵌套函数不 ...

  8. android bundle 对象,Android Bundle传递对象

    首先Android的Bundle是可以传递对象的.我们可以用Bundle b = new Bundle():b.putSerializable("key", 对象引用); 但是这样 ...

  9. js中函数传递参数,究竟是值传递还是引用传递?

    记住真理: js函数传递参数,不管是简单数据类型,还是引用数据类型,都是值传递!! 下面是js红包书里面的例子: function setName(obj) { obj.name = "Ni ...

最新文章

  1. 风口上的政府大数据 需要消除“大误区”
  2. 使用 pm2-web 监控 pm2 服务运行状态
  3. python列表按照指定顺序排序-Python常见排序操作示例【字典、列表、指定元素等】...
  4. 2-2. 控制对文件的访问
  5. 12.源码阅读(app启动流程-android api 26)
  6. 虚拟路由器冗余协议-VRRP
  7. partial关键字的含义和使用
  8. vue框架开发出现页面空白、白屏的解决方法总汇
  9. python输入一个字符串、计算其中小写字符的个数_编写程序,输入一个字符串,统计其中大小写字母数字和其他符号的个数并输出,要求统计过程在函数COUNT中进行...
  10. 自从上了 SkyWalking,睡觉真香!!来,通过 Excel 来认识神器——POI
  11. 幻想影院添加html渲染,幻想影院无毒版-幻想影院清爽版预约 _5577安卓网
  12. vivo手机计算机错误怎么弄,VIVO手机无法连接电脑怎么办?
  13. Python实现高级电影特效,CXK也能影分身
  14. 直流屏电源模块GF22007-2高频充电模块R22007
  15. 缓解眼睛疲劳的一些解决方案
  16. 显卡升级测试软件,Shader Model 5.0显卡测试工具 显卡升级测试工具
  17. TC397 MCMCAN
  18. linux之limit.conf
  19. java跳转kotlin页面_Kotlin:return与跳转
  20. lucene java 庖丁解牛_Lucene分词器之庖丁解牛

热门文章

  1. C#语言中的可访问性约束
  2. 敏捷开发:软件与文档
  3. Raspberry Pi 3B 安装NoneBot2
  4. Java 使用List集合实现图书增删改查
  5. mysql使用数据库预处理_php中对MYSQL操作之预处理技术(2)数据库dql查询语句
  6. java ajax返回json数据json对象
  7. python将文件夹打包
  8. mysql -- 学习记录
  9. 20-ESP8266 SDK开发基础入门篇--C# TCP客户端编写 , 加入数据通信
  10. postgresql安装指南