类和对象 const&内联&静态成员&友元

const修饰成员函数
成员函数后加const,const修饰this指针所指向的对象,保证调用这个const成员函数的对象在函数内不会被改变
可读可写可以调用只读;只读不能调用可读可写
const在之前,修饰对象 const Date *p Date const p
const在之后,修饰指针变量本身 Date const p

  1. const对象不可以调用非const成员函数,可以调用const成员函数
  2. 非const对象可以调用非const成员函数和const成员函数
  3. const成员函数内可以调用其它的const成员函数,不可以调用非const成员函数
  4. 非const成员函数内可以调用其它的const成员函数和非const成员函数

inline(内联)
以inline修饰的函数叫做内联函数,提升程序运行效率

  1. 以空间换时间,省去调用函数的额外开销
  2. 对于编译器只是一个建议
  3. inline必须和函数定义放在一起,成为内联函数
  4. 定义在类内的成员函数默认定义为内联函数

尽量以const,enum(枚举),inline替换 #define
宏的优点:增强代码复用性,提高性能
宏的缺点:
1. 不方便调试(因为在预处理阶段进行了宏替换)
2. 导致代码可读性差,可维护性差,容易误用
3. 没有类型安全检查

友元:突破类封装的一个函数,友元函数允许在类外访问该类中的任何成员,友元函数用关键字friend说明

  1. 友元函数不是类的成员函数
  2. 友元函数可以通过对象访问所有成员

Date是Time的友元,所以Date可以访问Time的所有成员
注意:友元一定上破坏了c++的封装,不宜多用

类的静态成员:

  1. 类里边static修饰的成员称为静态类成员
  2. 类的静态成员为该类型的所有对象所共享

    静态成员函数直接突破类域就能调用;
    静态成员函数只能访问静态成员变量,因为没有this指针

问题:
静态成员函数不可以访问非静态成员函数
非静态成员函数可以访问静态成员

const修饰成员函数:在成员函数后边加const,const修饰this所指向的对象,保证调用这个const成员函数的对象在函数内不会被改变
类的静态成员:
1.类里边static修饰的成员称为静态类成员
2.静态成员为该类型的所有对象所共享
静态成员函数没有隐含的this指针

C语言:static修饰变量或函数
函数定义或代码块外变量声明:static修改标识符链接属性(external->internal),存储类型和作用域不变
代码块内部变量声明时:static修改存储类型,从自动改为静态变量,链接属性和作用域不变。

C++:
static修饰成员变量:
1.在类内完成声明,在类外完成定义
2.为所有对象共享,不在属于某个具体对象
3.sizeof(对象),不包括静态成员变量

static修饰成员函数:
1.无this指针。普通成员函数具有隐藏的this指针
2.可以不用对象来调用
类型::静态成员函数名字 或者(对象.静态成员函数的名字 转换为前一种方式)

// 面试题:vector是如何增容?一定是2倍?
// SGI 2倍 PJ 1/2
// 拷贝数据涉及深浅拷贝及类型萃取

// 面试题:vector和list的区别是什么?vector缺点是什么?
// vector 一白遮百丑 白:随机访问 丑:增容+前面的插入删除效率低O(N)
// list 一黑毁所有 黑:不能随机访问 所有:任意位置插入删除O(1)
// vector cpu高速缓存效率高

// vector resize和reserve缓解增容。
// resize和reserve的区别?

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值