常引用

用const声明的引用就是常引用。常引用所引用的对象不能被更改。我们经常见到的是常引用作为函数的形参,这样不会发生对实参的误修改。

常引用的声明形式为:const 类型说明符 &引用名。给大家看个常引用作为函数形参的例子:

#include<iostream>
using namespace std;
void show(const double& r);
int main()
{double d(9.5);how(d);return 0;
}
void show(const double& r)
//常引用作形参,在函数中不能更新r所引用的对象。
{cout<<r<<endl;
}

常对象

所谓常对象,是指数据成员在它的生存期内不会被改变。定义常对象时必须对其进行初始化,并且不能改变其数据成员的值。

常对象的声明形式为:类名 const 对象名 或者 const 类名 对象名。常对象的例子如下:

class A
{public:A(int i,int j) {x=i; y=j;}...
private:int x,y;
};
A const a(6,8); //a是常对象,不能被更新

如果程序中出现对常对象的数据成员修改的语句,编译器会报错。

一般修改对象的数据成员有两种途径,一种是通过对象名访问公有数据成员并修改其值,而常对象的数据成员是不能被修改的;另一种是类的成员函数修改数据成员的值,而常对象不能调用普通的成员函数。

可是这样的话,常对象就只剩数据,没有对外的接口了,这就需要为常对象专门定义的常成员函数了。

类的常成员函数

类中用const声明的成员函数就是常成员函数。常成员函数的声明形式为:类型说明符 函数名(参数表) const;

要提醒大家注意几点:
a.常成员函数在声明和实现时都要带const关键字;
b.常成员函数不能修改对象的数据成员,也不能访问类中没有用const声明的非常成员函数;
c.常对象只能调用它的常成员函数,不能调用其他的普通成员函数;
d.const关键字可以被用于参与对重载函数的区分,比如,如果有两个这样声明的函数:void fun(); void fun() const;,则它们是重载函数。

#include<iostream>
using namespace std;
class R
{public:R(int r1, int r2)    { R1=r1; R2=r2; }void print();void print() const;
private:int R1,R2;
};
void R::print()
{cout<<R1<<":"<<R2<<endl;
}
void R::print() const
{cout<<R1<<";"<<R2<<endl;
}
int main()
{R a(5,4);a.print(); //调用void print()const R b(20,52);b.print(); //调用void print() constreturn 0;
}


上面的R类中声明了两个同名函数print,第二个是常成员函数。

在main函数中定义了两个对象a和b,b是常对象,通过a调用的是没有用const声明的函数,而通过b调用的是用const声明的常成员函数。

类的常数据成员

类的数据成员也可以是常量和常引用,用const声明的数据成员就是常数据成员。

在任何函数中都不能对常数据成员赋值。构造函数对常数据成员初始化,只能通过初始化列表。给大家一个常数据成员的例子:

#include<iostream>
using namespace std;
class A
{public:A(int i);void print();const int& r;
private:const int a;static const int b;  //静态常数据成员
};
const int A::b=20;
A::A(int i):a(i),r(a) {}
void A::print()
{cout<<a<<":"<<b<<":"<<r<<endl;
}
int main()
{//建立对象a和b,并以50和10作为初值,分别调用构造函数,通过构造函数的初始化列表给对象的常数据成员赋初值A a1(50),a2(10);a1.print();a2.print();return 0;
}

常引用、常对象和对象的常成员相关推荐

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

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

  2. 【C++---16】常指针和常引用

    Coordinate coor1(3,5); //定义一个普通对象const Coordinate &coor2 = coor1; //coor2是对象的常引用const Coordinate ...

  3. 12.4 C++常引用

    C++对象常引用 在C++中,常用常指针和常引用作函数参数,既能保证数据安全,使数据不能被随意修改,在调用函数时又不必建立实参的拷贝. 用常指针和常引用作函数参数,可以提高程序运行效率. 在C++中, ...

  4. C++之临时对象、常引用和浅拷贝探究

      和结构体一样,一个类的对象也可以以值,指针或者引用的形式作为函数的参数或返回值.一般情况下,为了避免创建临时对象通常传对象的引用,并且为了避免在函数体内修改对象的值,通常使用常引用:     co ...

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

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

  6. C++中的常对象与常引用

    目录 一.常对象 二.用const修饰的类对象 1.常成员函数 声明 注意 三.常引用 1.声明 2.应该在何时使用: 1.在函数中无需改变其值的参数,应该使用常引用. 2.复制构造函数的参数一般也宜 ...

  7. “约见”面试官系列之常见面试题之第六十八篇之本地对象 内置对象 宿主对象(建议收藏)

    首先解释下宿主环境:一般宿主环境由外壳程序创建与维护,只要能提供js引擎执行的环境都可称之为外壳程序.如:web浏览器,一些桌面应用系统等.即由web浏览器或是这些桌面应用系统早就的环境即宿主环境. ...

  8. C++ 类与对象_类的其他成员(常成员,静态成员,友元)

    系列文章目录 重新复习c++,所以把书中的重点内容整理成博客,尽量简洁,易懂. C++ 类与对象_类和对象的定义与访问 (定义类和对象,访问对象成员,this指针) C++ 类与对象_构造函数和析构函 ...

  9. 常引用、常量指针、指针常量、指向常量的常指针、空指针与野指针解释

    1.一.基础知识 引用并非对象 引用必须初始化 引用只能绑定在对象上,而不能与字面值或某个表达式的计算结果绑定在一起 类型要严格匹配 int &a = 10; //错误:引用类型的初始值必须是 ...

最新文章

  1. 打开某网站无法访问出现空白页可能的原因
  2. DFS产生的ID=13562事件
  3. Python下ImportError: DLL load failed: 找不到指定的模块
  4. 脊柱外科病人资料管理系统的界面设计分析
  5. 【系统架构设计师】2020-08-06
  6. 四川三河职业学院计算机寝室,2020四川三河职业学院宿舍条件如何-有空调否?(宿舍图片)...
  7. 【github系列】github上传空目录
  8. 001---需求分析
  9. java运行nc后空白页,用友NC开发本地启动客户端时界面空白问题的解决
  10. html网页中加入音乐播放器,html 网页添加音乐播放器
  11. 淘宝自动下单软件//下单神器、、
  12. 判断对错:逻辑结构与数据元素本身的内容和形式无关
  13. java 完全解耦_java-完全解耦
  14. 记一次带宽跑满服务器卡死事故处理
  15. C语言中常见的转义字符总结
  16. 微信直播应该如何引流呢
  17. Python统计序列或文件中元素的频度
  18. multisim变压器反馈式_基于Multisim的负反馈放大电路仿真分析
  19. squad战术小队steam服务器搭建教程。
  20. python脚本厉害吗?使用selenium实现前程无忧简历自动刷排名!

热门文章

  1. Spring-aop-AbstractAutoProxyCreator
  2. 达梦数据库操作记录_【干货分享】达梦7与ArcGIS10.4进行安装适配详细步聚说明...
  3. java数据导出ex_大数据面试题(三)
  4. 单元测试用例_前端单元测试实践
  5. Swift 类的使用class
  6. maven启动web服务报错原因
  7. Mac上传代码到Github
  8. 读书笔记-你不知道的JavaScript(上)
  9. Git 经常使用命令合集
  10. flex 与 后台通讯