[C++]1.13 类中的成员变量、函数

静态成员变量:

属性:顾名思义,静态是关键。这里的静态是指和全局变量一样始终在内存中存在,在编译阶段就已经分配好空间(对象还未创建)。同时这意味着每个对象在使用它的时候是以“共享”的形式,不独属于某个对象。

声明工作:静态成员变量的定义在类内,而初始化需要在类外(不能在局部函数,包括main)。

访问:①通过对象访问 ②通过类名直接访问,两种形式的接口相同。

静态成员函数:

不可以访问普通成员变量,但可以访问静态成员变量。

可以通过类名和对象访问。

有权限管理。

————————————————————————————————————————

单例模式类:

目的:为了让类只有一个实例对象。(实例不需要自己释放)

实现

事先把默认构造函数和拷贝构造函数私有化。

内部维护一个私有的,唯一的类指针成员(该成员无疑是静态的),在类外通过引用初始化。

提供一个接口来单独、专门访问这个指针成员。

——————————————————————————————————————

类中的成员变量和成员函数分开存储和处理:

每个实例的对象都有一个独一无二的地址,用char类型来维护这个地址。

只有非静态成员变量属于对象,其他都不属于。所以本身类的大小只取决于非静态成员变量大小。

而非静态函数的成员区分则需要this指针的引入。

this指针:特殊的隐含指针,永远指向当前对象,即指向被调用的成员函数所属的对象

当一个对象被创建后,编译器会在所有对象的成员函数中生成一个隐含指针this,来保存这个对象的地址。this指针不是该对象的一部分,所以不会影响sizeof。如 Person* this。存在于非静态函数中,无需定义,直接使用。显而易见,这个指针充当了桥梁作用,把被调用成员函数和该函数所属对象连接起来。所以this 指针也是C++实现封装的一种机制。*this即该对象实值。

this指针可以解决命名冲突(如形式参数和成员变量的重名)。

__________________________________________________________________

常函数与常对象
对象调用普通函数的形式,默认的this指针为 Person * (const) this <这里的const指不可改变。>

常函数:void showcase() const{  函数体  }

不允许函数内部修改this指针指向对象的内部属性的值,即默认this指针为 const Person *const this 的形式(后面的const实际上是把this指针const了)。

对应常函数,如果有部分成员属性可以变动,可以加上mutable的前缀修饰。

常对象:const Person p1

不允许修改对象内部的任何属性。因为不允许修改成员属性,编译器也不会允许调用对象内部的函数,因为内部函数可能会破坏只读的特性。但如果此时被调用函数是常函数,编译器就会允许调用。

c++ 函数前面和后面 使用const 的作用:

前面使用const 表示返回值为const

后面加 const表示函数不可以修改class的成员

—————————————————————————————————————

友元函数 friend

应用:访问类的私有属性。

格式:①全局函数作友元函数

           friend void show( ) ;

           类内写好 有friend 前缀修饰的 函数声明。 然后在全局范围书写函数体。

           ②类作友元

           friend class tense ;

            一个类要调用另一个类里的私有属性。被调用类里写好 有friend 前缀修饰的 函数声明。 

           ③成员函数作友元

           friend void tense :: show( ) ;

            特定的类中成员函数可以作为友元调用该类的私有属性

           

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值