辨析:C++中的常类型数据成员、常成员函数和静态成员、静态成员函数

常成员和静态成员都是C++类成员中需要特殊记忆和对待的,而这两个概念在中文上有些接近,容易混淆,因此特地整理一下,方便学习和记忆。

关键字解析
  • const,常类型,类型定义符,意味着值保持不变,作用是对变量的值进行保护,不允许修改,属于数据类型或函数类型的一种,是变量(函数)自身的性质,类似signed、unsigned关键字。
  • static,静态类型,修饰符,主要用于控制数据的存储方式和可见性,改变变量的生存期和作用域。在类的定义中则属于类的行为。
在类中的应用和初始化
  • 常数据成员,意味着该成员为常量,除了在实例化为对象时调用构造函数可进行初始化赋值以外,其他任何时候均不可改变,在类内声明和定义,在实例化为对象时分配内存和初始化,随着对象的销毁而销毁。

  • 静态成员变量,类的静态成员变量,在类的定义中进行声明而不定义。在遵守类的public/private/protected访问继承规则的同时,相当于作用在整个类域(包括派生类)上的全局变量,即类的所有对象及其派生类的对象共同维护一个静态变量。由于类的定义在每次被实例化的时候都会执行,因此必须在类的定义外进行定义和初始化。

  • 常成员函数,声明方式:类型标识符 函数名(形参列表)const
    类的成员函数的一种类型,由于const是函数类型,故在函数实现的时候也应带上const关键字。常成员函数具有以下特殊性质
    • 不能更新成员变量的值(静态成员变量除外)
    • 不能调用除了常成员函数以外的成员函数
    • 可以用来区分函数重载
    • 类的常对象只能访问类的常成员函数
  • 静态成员函数 ,声明方式:static 类型标识符 函数名(形参列表)
    静态成员函数只能被定义一次,由类的全体对象共用,属于类的行为,与具体对象无关,而本身也具有如下的特殊性质
    • 不可以直接访问类中的非静态成员变量和非静态成员函数,只能通过形参传入的对象名来进行访问。
    • 不可以 在函数实现时加static关键词,否则会出错
    • 静态成员函数不含this指针,可以在类外通过“类名::函数名”的方式直接调用。也可以通过对象调用
总结
  • 常类型属于变量和函数自身的类型,用来防止值的改变,常数据成员本身不可改变,而常成员函数不能对所依附的对象的变量进行更改,均依赖于具体的对象实现。
  • 静态类型属于类自身的行为,不依赖于具体变量的实现。在使用时也不需要通过对象名称访问。静态成员之间可以相互访问。在定义成员函数时,如果不需要调用非静态成员变量,则定义为静态成员函数则会显得方便。
  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值