类和对象(二)
类和对象(二)
这篇博客主要根据const修饰成员函数,内联,友元函数以及静态成员这四个方向说明。
const修饰的成员函数
在以前的学习中我们学习了const修饰指针,修饰指针指向的变量,const修饰变量以及const修饰函数返回值等,这一次我们学习const修饰成员函数。
首先const放在函数后面:void fun()const
这样表示const修饰的是this指针所指向的对象,它不可改变。
void fun()const == void fun(const A* this)
内联
以inline修饰的函数叫做内联函数,编译时C++编译器会调用内联函数的地方展开,没有 函数压栈的开销,内联函数提升程序运行的效率。
- inline是一种以空间换时间的做法,省去调用函数额开销。所以代码很长或者有循环/递归的的函数不适宜使用内联。
- inline对于编译器而言只是一个建议,编译器会自动优化,如果定义为inline的函数体内有循环/递归等等,编译器优化时会忽略掉 内联。
- inline必须函数定义放在一起,才能成为内联函数,仅将inline放在声明前是不起不作用的。
- 定义在类内的成员函数默认定义为内联函数。
在C++中我们一边用const enum inline替代#define
相比较下,宏的优点: - 增强代码的复用性。
- 提高性能。
宏也有很多缺点: - 不方便调试宏。(因为预编译阶段进行了替换)
- 导致代码可读性差,可维护性差,容易误用。
- 没有类型安全的检查。
友元类
有的时候我们需要在一个类中使用另一个类的成员函数,这个时候我们可以用关键字friend将类声明为友元类,需要注意的是友元类是单向的,我是你的友元类所以我可以用你的成员函数,可是你要不是我的友元依旧不能使用。
需要注意的是友元类一定程度上破坏了C ++的封装性,所以不宜多用。
静态成员
我们在上一篇知道类里面有成员函数,成员函数存储在代码段里边。随着类的改变成员函数也会改变,他的作用域是整个类,可是如果成员被static修饰,这样他就成为了静态的成员函数,存储在数据段里边,相同的他的作用域也会增大,作用域是全局。
- 类里面static修饰的成员,成为静态类成员。
- 类的静态成员是该类型的所有对象对象所共享。