目录

一、常对象

二、用const修饰的类对象

1.常成员函数

声明

注意

三、常引用

1.声明

2.应该在何时使用:

1.在函数中无需改变其值的参数,应该使用常引用。

2.复制构造函数的参数一般也宜采用常引用传递。

3.普通引用与常引用的区别



一、常对象

必须进行初始化,且不能被更新

二、用const修饰的类对象

1.常成员函数

声明

类型说明符 函数名(参数表) const;

注意const在后面

注意

(1)const是函数类型的一个组成部分,因此在函数的定义部分也要带const关键字

(2)如果将一个对象说明为常对象,则通过该常对象只能调用它的常成员函数

(3)无论是否通过常对象调用常成员函数,在常成员函数调用期间,目的对象都被视为常对象,因此常成员函数不嫩更新目的对象的数据成员,也不能针对目的对象调用该类中没有用const修饰的成员函数。

(4)const关键字可以用于对重载函数的区分。

三、常引用

1.声明

const 类型标识符 &引用名;

1.常引用所引用的对象不能被更新

2.非const引用只能绑定到普通的对象,不能绑定到常对象。常引用可以绑定到常对象。

3.通过常引用访问该对象时,只能把该对象当作常对象。

4.对于基本数据类型的引用,不能为数据赋值。对于类类型的引用,不能修改它的数据成员,也不能调用它的非const的成员函数。

2.应该在何时使用:

1.在函数中无需改变其值的参数,应该使用常引用。

使用普通引用方式传递会使得常对象无法被传入,采用值传递或传递常引用的方式可以避免这一问题。对于大对象来说,值传递耗时较多,因此传递引用为宜。

例:

float dist(const Point &p1,const Point &p2)
{double x=p1.x-p2.x;double y=p1.y-p2.y;return static_cast<float>(sqrt(x*x+y*y));
}

p1和p2的值在函数dist内没有改变,顺带一提p1和p2是Point类类型

2.复制构造函数的参数一般也宜采用常引用传递。

class A{
public:
A(){ cout << "A con" << endl; }
A(const A& a1){ cout << "A copy" << endl; }    //使用复制构造函数的常引用
};
class B{
private:
A ap;
public:
B(A &a1) :ap(a1){ cout << "B con" << endl; }
};
int _tmain(int argc, _TCHAR* argv[])
{
A a1=A();
B b1 = B(a1);
return 0;
}

3.普通引用与常引用的区别

1.都可以通过原本变量修改变量值,且该变量的引用和常引用的值都会改变。

2.不能通过常引用修改变量和常引用的值。

3.可以通过修改普通引用的值改变原本变量的值。

int _tmain(int argc, _TCHAR* argv[])
{
int a = 1;
const int &b = a;
int &c = a;
cout << "a=" << a << endl;
cout << "b=" << b << endl;
cout << "c=" << b << endl;
a = 2;
cout << "a=" << a << endl;
cout << "b=" << b << endl;
cout << "c=" << b << endl;//b = 2;//报错:表达式必须是可修改的左值
c = 3;
cout << "a=" << a << endl;
cout << "b=" << b << endl;
cout << "c=" << b << endl;
}运行:a=1
b=1
c=1
a=2
b=2
c=2
a=3
b=3
c=3

C++中的常对象与常引用相关推荐

  1. 常对象和常函数的关系 const

    转载自:http://www.diybl.com/course/3_program/c++/cppsl/2008525/117871.html (1) 常对象 用const修饰的对象叫对象常量,其格式 ...

  2. C++常对象,常变量,常成员函数详解(含添加内容)

    既要使数据能在一定范围内共享,又要保证它不被任意修改,可使用const. ·        用const修饰的声明数据成员称为常数据成员 ·        用const修饰的声明成员函数称为常成员函数 ...

  3. 常对象与常函数(Const修饰的对象与成员函数)

    常函数: 其定义与注意事项如下:     1.成员函数后加const后,我们称这个函数为常函数     2.常函数内不可修改成员属性     3.成员属性声明时加关键字mutable后,在常函数中依然 ...

  4. C++中的常引用、常对象、常函数、常数据成员

    1.常引用 用const声明的引用就是常引用.常引用所引用的对象不能被更改.经常见到的是常引用作为函数的形参,这样不会发生对实参的误修改.常引用的声明形式为:const 类型说明符 &引用名. ...

  5. C++中常对象与常成员函数以及this与成员函数的联系与区别

    class A { }; /* 小记:对于const声明的对象,针对哪个变哪个不变得问题,实际上就是const后的整体不变 e.g.: const int *A; 或 int const *A; / ...

  6. C++学习(六) 常引用、常对象、常对象成员、常成员函数

    文章目录 1.常引用 1.1.作用 1.2.说明 二.常对象 2.1.作用 2.2.注意 2.3.说明 三.常对象成员 3.1.作用 3.2.说明 四.常成员函数 4.1.说明 4.2.注意 1.常引 ...

  7. C++中常对象、常成员函数、常成员变量

    用const修饰的类对象叫做常对象, 用const修饰的成员函数叫常成员函数, 用const修饰的成员变量叫常成员变量, 常对象: 型如:      const  <类名>  <对象 ...

  8. C++ 之常对象,常对象成员

    一.常对象: 1.常对象定义:Time  const  t1(1,2,3)或者const Time t1: 2.常对象不能调用该对象的非const型的成员函数(系统主动调用的构造析构函数除外): 3. ...

  9. C++高阶 常对象和常函数

    常函数 在成员函数的声明及定义的形参括号后边加上const关键字,注意如果存在声明的话,声明和定义都必须加上const,这就叫常函数,常函数指的是常成员函数,普通函数不能用const修饰. class ...

最新文章

  1. 力扣—— 三维形体投影面积
  2. Neighbor-Vote:使用邻近距离投票优化单目3D目标检测(ACM MM2021)
  3. 利用T-SQL语句快速清理ZBLOG程序的SQL SERVER2012数据库内容
  4. 卡拉OK效果的实现-iOS音乐播放器
  5. jQuery基础之(二)jQuery中的$
  6. Ansible Inventory指北进阶
  7. Ontology的研究和应用
  8. centos下安装PHP的IDE,如何在 CentOS 8 上安装和使用 PHP 编辑器
  9. 【题解】(排序) —— POJ 0803:DNA排序
  10. oracle向右削减和补全,b操纵序列削减Oracle数据库开辟工作量-开辟技术/b[Oracle防范]...
  11. c语言中堆栈_C语言编程中的堆栈
  12. vba 数组填充单元格
  13. 在我一生中最猥琐的时候遇见你(1)
  14. 汽车智能电气技术分析
  15. mysql候选关键字_MySQL Key值(PRI, UNI, MUL)的含义、超键(super key)、候选键(candidate key)、主键(primary key)...
  16. 几款在线脑图制作工具
  17. 一个网工的十年奋斗史 - 工作篇
  18. VCC、 VDD、VSS、VEE 电压符号的解释
  19. 自动化测试工程师的发展前景怎么样?好不好?
  20. single cell 基础笔记(一)

热门文章

  1. vue上传图片到又拍云
  2. Python Pandas 综合练习
  3. 求职 | 从大学到秋招,我如何拿下腾讯offer ?
  4. AI微服务架构设计—人脸AI SaaS服务(一)
  5. 易语言 解决 网页访问对象 重定向后cookie不完整
  6. JAVA练习208-井字游戏
  7. 《数据结构(C语言版)》-01-绪论-相关代码分析
  8. i will always loveyou(我永远爱你).mp3铃声 i will always l...
  9. RocketMQ同步消息、异步消息、单向消息详解
  10. MatlabR2017b安装时遇到“应用程序并行配置不正确”的问题