C++中对象的常引用
直接传递对象名
用对象名做函数参数时,在函数调用时将建立一个新的对象,它是形参对象的拷贝。
================下面给出一个直接传递对象名的例子程序1.1==================
#include<iostream>
using namespace std;
class Time
{
public:
Time(int,int,int);//构造函数
void Print();//输出信息函数
void reset(Time t);//重置函数
private:
int year;
int month;
int day;
};
Time::Time(int y,int m,int d)
{
year=y;
month=m;
day=d;
}
void Time::Print()
{
cout<<year<<"/"<<month<<"/"<<day<<endl;
}
void Time::reset(Time t)
{
t.year=0;
t.month=0;
t.day=0;
}
int main()
{
Time t1(12,12,12);//定义一个对象并初始化
t1.Print();//输出t1的数据成员
t1.reset(t1);//重置t1中的数据成员
t1.Print();//输出t1中的数据成员
return 0;
}
运行结果:
从运行结果来看,reset函数并没有起到作用。
实参把值传递给形参,二者分别占不同的存储空间。无论形参是否修改都不会到实参的值。这种形式的虚实结合,要产生实参的拷贝,当对象的规模比较大的时候,则时间开销和空间开销都可能很大。
因此,这种方法虽然可行,但是并不提倡这种用法~
形参为对象的引用
#include<iostream>
using namespace std;
class Time
{
public:
Time(int,int,int);//构造函数
void Print();//输出信息函数
void reset(Time &t);//重置函数 ============对这一行代码进行了修改======================
private:
int year;
int month;
int day;
};
Time::Time(int y,int m,int d)
{
year=y;
month=m;
day=d;
}
void Time::Print()
{
cout<<year<<"/"<<month<<"/"<<day<<endl;
}
void Time::reset(Time &t)//==============对这一行代码进行了修改=================
{
t.year=0;
t.month=0;
t.day=0;
}
int main()
{
Time t1(12,12,12);
t1.Print();
t1.reset(t1);
t1.Print();
return 0;
}
运行结果:
形参为对象的常引用
void reset(const Time &t);
则在函数中只能使用对象t中的数据成员和成员函数,而不能修改其中的成员函数,也就是不能修改其对应的实参中的数据成员的值。
#include<iostream>
using namespace std;
class Time
{
public:
Time(int,int,int);//构造函数
void Print();//输出信息函数
void reset(const Time &t);//重置函数
private:
int year;
int month;
int day;
};
Time::Time(int y,int m,int d)
{
year=y;
month=m;
day=d;
}
void Time::Print()
{
cout<<year<<"/"<<month<<"/"<<day<<endl;
}
void Time::reset(const Time &t)
{ //既然声明了t是对象的常引用,就不可以修改其数据成员的值,因此,下面的三行代码是错误的。。
t.year=0;
t.month=0;
t.day=0;
}
int main()
{
Time t1(12,12,12);
t1.Print();
t1.reset(t1);
t1.Print();
return 0;
}
该程序会报错,因为在函数reset中,企图修改对象t中的数据成员的值
C++中对象的常引用的更多相关文章
- OC中对象元素的引用计数 自动释放池的相关概念
OC中数组对象在是如何处理对象元素的引用计数问题的,同时介绍一下自动释放池的相关概念 一.数组对象是如何处理对象元素的引用计数问题[objc] view plaincopy 1. // 2. / ...
- C++ const常量对象、常量成员函数和常引用
01 常量对象 如果不希望某个对象的值被改变,则定义该对象的时候可以在前面加const关键字 class CTest { public: void SetValue() {} private: int ...
- Java中对象和引用的理解
偶然想起Java中对象和引用的基本概念,为了加深下对此的理解和认识,特地整理一下相关的知识点,通过具体实例从两者的概念和区别两方面去更形象的认识理解,再去记忆. 一.对象和引用的概念: 在Java中万 ...
- C++中的常对象和常对象成员
常对象 常对象必须在定义对象时就指定对象为常对象. 常对象中的数据成员为常变量且必须要有初始值,如 Time const t1(12,34,36); //定义t1为常对象 这样的话,在所有的场合中,对 ...
- 详解Java中对象的软、弱和虚引用的区别
对于大部分的对象而言,程序里会有一个引用变量来引用该对象,这是最常见的引用方法.除此之外,java.lang.ref包下还提供了3个类:SoftReference.WeakReference和Phan ...
- c++中返回对象与返回引用的区别
这几天在做用C++做课程设计,对其返回对象的实现感到迷惑. 通过对汇编代码的分析,可以清楚的看到,直接返回引用和返回对象的区别到底是什么. 分析的程序如下 #include<cstdio> ...
- 非常易于理解‘类'与'对象’ 间 属性 引用关系,暨《Python 中的引用和类属性的初步理解》读后感
关键字:名称,名称空间,引用,指针,指针类型的指针(即指向指针的指针) 我读完后的理解总结: 1. 我们知道,python中的变量的赋值操作,变量其实就是一个名称name,赋值就是将name引用到一个 ...
- JavaScript中的this所引用的对象和如何改变这个引用
this是函数内部的一个特殊对象,它引用的是函数执行环境对象.也就是运行是基于函数的执行环境绑定. 1.在网页全局作用域中调用函数时,this引用window var color='black'; f ...
- Python中对象的引用与复制
在python进行像b = a这样的赋值时,只会创建一个对a的新引用,使a的引用计数加1,而不会创建新的对象: >>> a = 'xyz' >>> import s ...
随机推荐
- 326 集合 ,数据类型的补充 ,copy , 编码之间的转换
一.数据类型补充1,对于元组:如果只有一个元素,并且没有逗号,此元素是什么数据类型,改表达式就是什么数据类型. tu = () tu1 = (,) print(tu,type(tu)) #1 < ...
- 纯CSS3垂直动画菜单
在线演示 本地下载
- nginx配置大全
nginx配置大全
- hd acm1008
Problem Description The highest building in our city has only one elevator. A request list is made u ...
- linux下无线鼠标驱动执行流程
操作系统: debian 7.4(linux 3.2.54) 硬件: 一个无线鼠标.一个有线鼠标.usb集线器. 从淘宝上花了15块钱买了个无线鼠标,很好奇它的驱动程序是如何执行的. 首先将usb集线 ...
- Apache 的 httpd.conf 注释
ServerRoot “/usr/local“ ServerRoot用于指定守护进程httpd的运行目录,httpd在启动之后将自动将进程的当前目录改变为这个目录,因此如果设置文件中指定的文件或目录是 ...
- hiho一下 第四十八周 拓扑排序·二【拓扑排序的应用 + 静态数组 + 拓扑排序算法的时间优化】
题目1 : 拓扑排序·二 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho所在学校的校园网被黑客入侵并投放了病毒.这事在校内BBS上立刻引起了大家的讨论,当 ...
- Saiku_00_资源帖
一.精选 1.李秋 随笔分类 - pentaho 二.概述 1.Saiku + Kylin 多维分析平台探索 三.Saiku+Kylin 1.使用Saiku+Kylin构建多维分析OLAP平台 2.使 ...
- 04 - Django应用第一步
知识点 1) 创建项目命令 以及项目结构介绍 2) 创建应用程序命令 应用, 项目的区别 以及应用程序结构 3) 启动项目命令 4) URLs的编写 include()的使用 get发送参数的格式 u ...
- Xposed模块开发学习记录
Xposed模块相关API可以参考在线文档: https://api.xposed.info/reference/packages.html 入门教程可以参考: https://github. ...