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 ...
随机推荐
- 2、ES6结构赋值和模板字符串
ES6允许按照一定的模式,从数组和对象中提取值,这被称为结构,即解开数据的结构 1.数组的解构赋值 let [a,b] = [1,2] let [a,b,c=100] = [1,2] //c的默认值为 ...
- nodejs express cheerio request爬虫
const express = require('express') const cheerio = require('cheerio') const request = require(" ...
- 2019全国大学生信息安全竞赛ciscn-writeup(4web)
web1-JustSoso php伪协议获取源码 ?file=php://filter/read=convert.base64-encode/resource=index.php index.php ...
- Leet Code 1.两数之和
给定一个整数nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标. 可以假设每种输入只会对应一个答案.但是,不能重复利用这个数组中同样的元素. 题解 提交代 ...
- Cesium 禁止相机进入地底下[转]
原文:https://blog.csdn.net/thor027/article/details/82455649 viewer.clock.onTick.addEventListener(funct ...
- ArcMap与快捷键冲突
ArcMap与快捷键冲突 商务合作,科技咨询,版权转让:向日葵,135-4855__4328,xiexiaokui#qq.com 问题:armap进入鼠标自动导航状态,arcmap失控,系统紊乱,导致 ...
- SQL Server 将查询结果集以XML形式展现 for xml path
for xml path,其实它就是将查询结果集以XML形式展现 双击打开
- iptables nat表配置
- Flutter Offstage、Visibility隐藏/可见
Offstage是控制组件隐藏/可见的组件,如果感觉有些单调功能不全,我们可以使用Visibility,Visibility也是控制子组件隐藏/可见的组件.不同是的Visibility有隐藏状态是否留 ...
- 深入学习c++--智能指针(二) weak_ptr(打破shared_ptr循环引用)
1. 几种智能指针 1. auto_ptr: c++11中推荐不使用他(放弃) 2. shared_ptr: 拥有共享对象所有权语义的智能指针 3. unique_ptr: 拥有独有对象所有权语义的智 ...