什么是常对象成员,什么是常成员函数?

首先先看一段代码:

class A
{
private:const int a;                // 常对象成员,只能在初始化列表赋值public:// 构造函数A() { };A(int x) : a(x) { };        // 初始化列表// const可用于对重载函数的区分int getValue();             // 普通成员函数int getValue() const;       // 常成员函数,不得修改类中的任何数据成员的值
};

可以看出常成员函数的声明形式为:返回类型 成员函数名 (参数表)const。实际上,const的位置不同是易于搞混的。

  • 函数开头的 const 用来修饰函数的返回值,表示返回值是 const 的,也就是不能被修改,例如const char * getname()。
  • 函数头部的结尾加上 const 表示常成员函数,这种函数只能读取成员变量的值,而不能修改成员变量的值,例如char * getname() const。

常成员函数主要的特点?

  1. 不能更新类的成员变量
  2. 不能调用该类中没有用const修饰的成员函数,只能调用常成员函数
  3. 可以被类中其他成员函数调用
  4. 常对象只能调用常成员函数,而不能调用其他成员函数
    A b;                        // 普通对象,可以调用全部成员函数const A a;                  // 常对象,只能调用常成员函数、更新常成员变量const A *p = &a;            // 常指针const A &q = a;             // 常引用

举个例子:

class CDate
{public://常成员函数int year() const{ return y; }int month() const{//m++;              //错误:1)常成员函数中不能更新类的数据成员return m;}//普通成员函数int day(){return d++ ;}int AddYear(int i){ return y+1; }private:int y;int m;int d;
};int main()
{CDate const date;         //常对象//int day = date.day();   // 4)错误常对象不能调用非常成员函数int year = date.year();   //正确
}
class A{
private:int w,h;public:int getValue() const{           //常成员函数return w*h + getValue2();   //2)错误。只能调用常成员函数。}int getValue2(){               //普通成员函数return w+h+getValue();      //3)正确。常成员函数可以被其它成员函数调用}A(int x,int y){w=x,h=y;}A(){}};

其他注意事项

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

class Calculate{
private:int x,y;
public:Calculate(){}Calculate(int a,int b){x=a,y=b;}int calc() const   //常成员函数{return x*y; }int calc(){      //函数名称相同的非常成员函数return x+y;}};void main()
{   Calculate const  a(2,3);  //常对象Calculate        b(2,3);  //普通对象cout<<a.calc();     //调用int calc() const;输出6cout<<b.calc();     //调用int calc() ;输出5
}

const是函数类型的一部分,在实现部分也要带const

class Calculate{
private:int x,y;
public:Calculate(){}Calculate(int a,int b){x=a,y=b;}int calc() const ;       //声明常成员函数};
//类外定义(实现)
int Calculate::calc() const   //常成员函数
{return x*y;
}

C++常成员函数 常对象成员相关推荐

  1. C++ const关键字的总结(全局/局部变量、修饰指针和引用、成员函数和数据成员、修饰类对象、const与宏定义的区别、Static与Const的区别)

    const关键字 const关键字 1.什么是const 2.使用原理 2.1.const全局/局部变量 2.2.cosnt修饰指针和引用 2.3.const修饰函数参数 2.4.const修饰函数返 ...

  2. C++类成员函数返回对象及返回引用

    C++类函数返回类的对象及类的引用 一.代码例题 二.返回引用 三.返回对象 一.代码例题 #include <iostream> using namespace std;class ma ...

  3. 【C++】类和对象【中篇】--C++六个默认成员函数以及const成员函数

    文章目录 一.类的6个默认成员函数 二.构造函数 1.概念 2.特性 2.1特征分析--自动生成 2.2.特征分析--选择处理 2.3特征分析--默认构造 3.C++11补丁--缺省值 三.析构函数 ...

  4. 【C++】空指针调用成员函数及访问成员变量

    最近在review代码的时候发现,使用了空指针调用成员函数,并且成员函数内部有使用到成员变量,居然没有出错.很是奇怪,就用一篇博客把关于空指针调用成员函数相关的内容总结起来. 空指针调用成员函数 调用 ...

  5. 类的成员函数和数据成员分别存在哪里,类大小的计算

    Version S Description Date By V1 C First Version 2020-12-27 AYZP C―― Create,> A-- Add,> M-- Mo ...

  6. C++常成员函数与普通成员函数访问比较

    常数据成员: const 类型说明符 数据成员 如:const int year 常成员函数:类型说明符 函数名(参数表) const 如:void showDate() const 1.常成员函数可 ...

  7. 关于常成员函数对非常成员函数的调用问题

    常成员函数不能调用非常成员函数: 比如: #include<iostream> using namespace std; class A {const void print(){cout& ...

  8. static成员函数和static成员

    C++的静态成员是和类关联的,它属于某个类,但是不属于某个特定的对象.静态成员变量只存储一份供所有对象共用.所以在所有对象中都可以共享它.使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则, ...

  9. C++类的成员函数(在类外定义成员函数、inline成员函数)

    类的成员函数(简称类函数)是函数的一种,它的用法和作用和前面介绍过的函数基本上是一样的,它也有返回值和函数类型,它与一般函数的区别只是:它是属于一个类的成员,出现在类体中.它可以被指定为private ...

最新文章

  1. 威马新车型,率先放话搭载L4自动驾驶
  2. 为什么安装Android SDK后无法安装flatform?
  3. Android学习笔记(5)----启动 Theme.Dialog 主题的Activity时程序崩溃的解决办法
  4. windows使用nginx实现网站负载均衡测试实例
  5. [git] 基础操作-02 分支和主支合并
  6. ICCV 2021 | 模型安全不容忽视!特定样本触发器的隐形后门攻击方法
  7. matlab从哪里学,从零开始学MATLAB(附光盘)/从零开始学系列
  8. 多进程和线程的区别【转】
  9. 使用opencv-python读取webm格式的视频并转换成图片和avi格式的视频
  10. 什么是CIF?什么是4CIF?什么是QCIF?什么是D1?
  11. 软件测试面试过程中常见的问题
  12. 文件转换和操作的一些在线网页
  13. GitHub账号注册教程
  14. “鹏城”伴你鹏程:下届全国人工智能大赛再会!
  15. 模糊二维码识别、残缺二维码识别、快速二维码识别
  16. 珍视友情、珍爱生命、珍重和平—读余秋雨散文作品感悟
  17. emd 消除端点效应 matlab代码,对五种改善EMD端点效应的方法进行分析
  18. Android kotlin使用id直接做view的引用
  19. opporeno7和opporeno7pro的参数对比
  20. 【算法导论】生日悖论

热门文章

  1. 字符串复制的两种方法
  2. Shader学习之Cg语言一(Cg语言概述)
  3. API入门系列之五 -一个正儿八经的SDK程序
  4. 通过URL传参(参数也是URL)
  5. 小乌龟代码提交Gitee
  6. CAD坐标点、经纬度坐标点转ARCGIS矢量,求重叠面积
  7. VR概述及初识Unity 3D
  8. Oracle踩坑之路--ORA-01861:文字与格式字符串不符
  9. matlab 文件输出到text文件总结
  10. 前端基础-TCP/IP 不完全详解