常数据成员

 ◆ 常数据成员必须进行初始化,并且不能被更新。

 ◆ 常数据成员不能在声明时赋初始值(普通数据成员也是),常数据成员必须在构造函数初始化列表进行初始化;普通数据成员在初始化列表和函数体中初始化均可。

 ◆ PS:类的成员对象若要传入参数初始化,则必须在构造函数初始化列表进行;(成员对象:当一个类的成员是另一个类的对象时,这个对象就叫成员对象。)

常对象

 ◆ ⭐常对象可以调用常成员函数,不能调用非const成员函数;非const对象,可以调用普通成员函数和常成员函数。

 ◆ 常对象的成员函数不一定都是常成员函数;同样的常对象的数据成员不一定都是常数据成员。

 ◆ 常对象一旦初始化,常对象的数据成员便不允许修改,而不是说常对象的数据成员都是常数据成员。

 ◆ PS:定义常对象有两种方法,1. Point const a; 2. const Point a;(同样的,定义变量或指针时,const放前放后意义一样,如:1. const double a; double const a; 2. const int *p; int const *p; 但是定义指针常量时,只能用 int * const p;)

常成员函数

 ◆ 常成员函数不更新对象的数据成员。

 ◆ 常成员函数的const关键字可以被用于参与对重载函数的区分。

 ◆ ⭐通常非const成员函数需要定义一个const版本的重载函数,以方便定义常对象后调用常成员函数。
  ◈ 如果常对象调用的常成员函数返回的是指向当前对象的指针(或返回的是当前对象),那么此常成员函数的声明的返回类型要加const,例如:

    ◊ 成员函数返回指向当前对象的指针
      const *Point fun1();    //非const成员函数的类内声明;
      const *Point fun1() const; //习惯上要再声明一个常成员函数作重载函数,注意到此函数声明有两个const;

    ◊ 成员函数返回指向当前对象
      const Point fun1();    //非const成员函数的类内声明;
      const Point fun1() const; //习惯上要再声明一个常成员函数作重载函数,注意到此函数声明有两个const;

    ◊ ⭐注意,如果一个类中声明以下4个重载函数:
      ① Point fun1();
      ② const Point fun1();
      ③ Point fun1() const;
      ④ const Point fun1() const;
     【解析】①和②是冲突的,因为无法区分仅按返回类型区分的重载函数;③和④是冲突的,也是因为无法区分仅按返回类型区分的重载函数。
     所以正确的重载函数搭配有3种:

      ◊ ①和③搭配:
        Point fun1();             //函数返回非const对象
        Point fun1() const;          //函数返回非const对象
       [解析]适用于定义常对象后调用常成员函数,常成员函数返回类型是非const的Point类对象。

      ◊ ①和④搭配(这里把返回类型改为指针,因为常用):
        Point *fun1() {return this; };      //函数返回指向本对象的指针
        const Point *fun1() const { return this; };//函数返回指向本常对象的指针,第一个const说明返回的是指向常对象的指针,第二个const说明此函数是常函数

       [解析]适用于定义常对象后调用常成员函数,常成员函数返回类型是常Point类对象(如return *this;)。

      ◊ ②和④搭配:
        const Point fun1();          //函数返回常对象
        const Point fun1() const;       //函数返回常对象
       [解析]适用于定义常对象后调用常成员函数,常成员函数返回类型是常Point类对象。

      ◊ ②和③搭配:
        const Point fun1();
        Point fun1() const;
       [解析]虽然搭配合法,但是似乎不存在这种搭配。

【C++】 常对象、常数据成员、常成员函数总结相关推荐

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

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

  2. 常对象、常数据成员、常成员函数总结

    # include <iostream> using namespace std;class Time {public:Time(int h = 10, int m = 30, int s ...

  3. 常引用、常对象和对象的常成员

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

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

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

  5. C++常成员函数 常对象成员

    什么是常对象成员,什么是常成员函数? 首先先看一段代码: class A { private:const int a; // 常对象成员,只能在初始化列表赋值public:// 构造函数A() { } ...

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

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

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

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

  8. 简单总结 常(常量/const)成员函数 and 常对象的使用

    一.常(常量/const)成员函数 在函数定义式()后 + const 比如: class Rational { public://非常成员函数void func() { cout << ...

  9. [c++]常对象的特点

    c++中为了保护对象的数据安全,可以采用常对象. 常对象特点: 1.常成员数据的值无法被修改. 2.常成员数据必须赋初值. 3.常成员函数只能引用本类的常数据成员,且不可改变成员的值. 4.常成员函数 ...

最新文章

  1. 白话Elasticsearch47-深入聚合数据分析之Cardinality Aggs-cardinality算法之优化内存开销以及HLL算法
  2. 提高 服务器 内存 利用率_怎样提高AI服务器的利用率
  3. USC提出拟牛顿法深度学习优化器Apollo,效果比肩SGD和Adam
  4. Linux平台 Oracle 18c RAC安装Part3:DB配置
  5. piovt table python_python – Pandas:pivot和pivot_table之间的区别...
  6. jdk12源代码文件_在JDK 11中启动单文件源代码程序
  7. 电路板上的插头怎么拔下来_空调维修排查电路板内外原因
  8. hnu 暑期实训之7还是7 to_string的实现方法
  9. 在lamp环境下搭建多种论坛(下)
  10. 计算机 项目管理 stage phase区别
  11. Android逆向分析实例(三)-解密微信EnMicroMsg.db数据库
  12. win10开机密码忘记怎么办|win10登陆密码忘记解决方法
  13. 认知空间是什么意思_什么是认知?
  14. 贴吧怎么发帖,发防删图出现审核怎么办?
  15. 如何查看网站是是什么服务器_什么是网站
  16. VMware Workstation Pro网络配置(WiFi配置等)
  17. SpringBoot系列课程(二)-SpringBoot整合MyBatis
  18. 微信开发者工具button,input鼠标点击坐标偏移
  19. 关于如何解释机器学习的一些方法
  20. ERROR 1370 (42000): execute command denied to user ‘james‘@‘localhost‘ for routine ‘test.coun_add‘

热门文章

  1. Unity中遇到,GUIText已弃用,解决办法
  2. mysql配置MHA集群
  3. 为什么使用fitz读取pdf转为图片模糊
  4. 赚钱必看:独立开发者必知的一些总结
  5. 关于SDL多指触屏事件获取各手指状态的问题。
  6. 哈工大计算机学科等级,计算机学科评估为A以上10所高校!北邮超过哈工、上交、南大等...
  7. 人工智能属于计算机学科研究中的什么方向,“人工智能”属于计算机学科研究方向中的...
  8. [转] iOS 常用数学函数
  9. 【Linux命令】《鸟哥Linux基础》第二十一章 软件安装:源代码与Tarball
  10. Spring Boot缓存管理