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 ...
随机推荐
- c++ 之重要性
c++的功能比c语言大的多,c语言偏最底层,且程序短小,而对于一个大的系统,用c++,因为它具备了c语言的优点. 很多学嵌入式的觉得学了c语言之后,就不用学c++了,会认为c++很简单,然而,c++并 ...
- js 实现滑块效果
var dd = $(".drag_bott").removeAttr('id').last().attr('id','drag_bott'); var drag = docume ...
- 【leetcode刷题笔记】Permutation Sequence
The set [1,2,3,…,n] contains a total of n! unique permutations. By listing and labeling all of the p ...
- Spring Cloud之Feigin客户端重构思想
应该重构接口信息(重点) toov5-parent 存放共同依赖信息 toov5-api api的只有接口没有实现 toov5-api-member toov5-api-order to ...
- java:类集回顾
1.类集设置的主要目的:动态的对象数组 2.类集中有以下几个接口: Collection:是存放单值的最大父接口 |- List接口:里面的内容是允许重复的 |- ArrayList, Vector, ...
- Git教程及问题解析
本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! Git教程 最近用git比较多,做出教程一份,供大家参考. 1. 安装Git,并配置环 ...
- 将double型小数点后面多余的零去掉
/** 函数功能:将数值小数点后面多余的零清空.* 参数描述:* [in] aSource - 输入的源数值:* [out] aDestination - 输出截取后的数值* ...
- JAVA堆内存和栈内存初步了解
一.堆内存和栈内存 程序运行时内存分配有三种:静态存储分配,栈式存储分配,堆式存储分配 1.静态存储分配: 在程序编译时就可以确定数据目标在运行时所需要的内存,因此在编译时就为其分配固定大小的内存. ...
- docker 安装过程
- linux命令学习笔记(8):cp 命令
cp命令用来复制文件或者目录,是Linux系统中最常用的命令之一.一般情况下,shell会设置一个别名, 在命令行下复制文件时,如果目标文件已经存在,就会询问是否覆盖,不管你是否使用-i参数.但是如果 ...