C++_向函数传递对象
向函数传递对象
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;
}
C++_向函数传递对象的更多相关文章
- C++:向函数传递对象(对象、对象指针、对象引用)
3.5.1 使用对象作为函数参数,其方法与传递基本类型的变量相同 //例3.21 使用对象作为函数参数 #include<iostream> using namespace std; ...
- (63)Wangdao.com第十天_预处理、预解析_函数 上下文对象、参数列表对象
预解析.预处理 1. 在全局代码执行之前,js 引擎 就会创建一个栈来存储管理所有的 执行上下文对象 2. 在 全局执行上下文 window 确定以后,进行压栈 3. 在 函数执行上下文对象 确定以后 ...
- 理解Underscore中的_.template函数
Underscore中提供了_.template函数实现模板引擎功能,它可以将JSON数据源中的数据对应的填充到提供的字符串中去,类似于服务端渲染的模板引擎.接下来看一下Underscore是如何实现 ...
- 理解Underscore中的_.bind函数
最近一直忙于实习以及毕业设计的事情,所以上周阅读源码之后本周就一直没有进展.今天在写完开题报告之后又抽空看了一眼Underscore源码,发现上次没有看明白的一个函数忽然就豁然开朗了,于是赶紧写下了这 ...
- JavaScript学习笔记(二)——闭包、IIFE、apply、函数与对象
一.闭包(Closure) 1.1.闭包相关的问题 请在页面中放10个div,每个div中放入字母a-j,当点击每一个div时显示索引号,如第1个div显示0,第10个显示9:方法:找到所有的div, ...
- JavaScript学习总结(二)——闭包、IIFE、apply、函数与对象
一.闭包(Closure) 1.1.闭包相关的问题 请在页面中放10个div,每个div中放入字母a-j,当点击每一个div时显示索引号,如第1个div显示0,第10个显示9:方法:找到所有的div, ...
- 前端学习 第二弹: JavaScript中的一些函数与对象(1)
前端学习 第二弹: JavaScript中的一些函数与对象(1) 1.apply与call函数 每个函数都包含两个非继承而来的方法:apply()和call(). 他们的用途相同,都是在特定的作用域中 ...
- JS中的函数,Array对象,for-in语句,with语句,自定义对象,Prototype
一)函数 A)JS中的函数的定义格式: function add(a,b) { var sum = a+b; document.write("两个数的和是:" + sum); // ...
- php的引用&(就是在变量或者函数、对象等前面加上&符号)
官方文档: 1.引用是什么:http://www.php.net/manual/zh/language.references.whatare.php 2.引用做什么:http://www.php.ne ...
随机推荐
- select和C标签
<select name="cpcyModel.rwzj" id="cpcyModel_rwzj"> <option value=" ...
- OpenFOAM设置监测点(探针)
首先准备好我们自己的平常算例文件,本次我们以圆柱绕流的算例来说明用法 然后我们在/opt/openfoam4/etc/caseDicts/postProcessing/probes文件夹下找到prob ...
- 如何快速关联/修改Git远程仓库地址
如何快速关联/修改Git远程仓库地址?按照如下步骤即可快速实现关联/修改Git远程仓库地址: 删除本地仓库当前关联的无效远程地址,再为本地仓库添加新的远程仓库地址 git remote -v //查看 ...
- 三大框架 之 Hibernate查询(一对多、多对多、查询关系)
目录 一对多 表之间关系 表之间关系建表原则 一对多关系配置 建立表 建立ORM 添加配置文件 在hibernate.cfg.xml中的标签里,添加核心配置文件 引入工具类 编写测试类 级联操作 什么 ...
- kafka 的server.properties
# Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreement ...
- 在mac中安装tmux
在mac 中安装Tmux: 在终端输入如下命令: brew install tmux Tmux 的快捷键前缀(Prefix) 为了使自身的快捷键和其他软件的快捷键互不干扰,Tmux 提供了一个快捷键 ...
- j2s7s300 refers to jaco v2 7DOF spherical 3fingers
<?xml version="1.0"?> <!-- j2s7s300 refers to jaco v2 7DOF spherical 3fingers --& ...
- CM记录-CDH部署手册
1.安装环境和软件准备 CentOS release 7.4 JDK1.8.0_121 mysql-connector-java-5.1.40-bin.jar CDH-5.10.2-1.cdh ...
- Spring MVC入门的实例
作为Spring MVC入门,以XML配置的方式为例.首先需要配置Web工程的web.xml文件. 代码清单14-1:web.xml配置Spring MVC <?xml version=&q ...
- Connection reset by peer引发的思考
http://www.mamicode.com/info-detail-506381.html