2021-3-18 第六天
C++内容学习
GithubCplusPlus 一、基础进阶
网址: github.com/Light-City/CPlusPlusThings/blob/master/README.md
代码环境:Ubuntu 18.04
编译器:gcc/g++
一、基础进阶
一)const
常类型(const修饰的)值不能被更新
2、const作用
类型检查
const与#define的区别
const常量具有类型
const定义的变量只能类型为整数和枚举
防止修改,起保护作用
节省空间
3、const对象默认为文件局部变量
4、定义变量
5、指针与const
用const声明常量,则指针也要为const。
用const声明指针,指向一个对象的地址,则该对象不非得是const对象。
6、函数中使用const
对于非内部数据类型的参数而言,像void func(A a) 这样声明的函数注定效率比较低。因为函数体内将产生A 类型的临时对象用于复制参数a,而临时对象的构造、复制、析构过程都将消耗时间。
为了提高效率,可以将函数声明改为void func(A &a),因为“引用传递”仅借用一下参数的别名而已,不需要产生临 时对象。
但是函数void func(A &a) 存在一个缺点:“引用传递”有可能改变参数a,这是我们不期望的。解决这个问题很容易,加const修饰即可,因此函数最终成为 void func(const A &a)。
因此:
对于非内部数据类型,void func(const A &a)的方式可以提供效率,且a不会被保护。
对于内部数据类型,void func(int a)即可,无需void func(const int &a)
7、类中使用const
在一个类中,任何不会修改数据成员的函数都应该声明为const类型。
如果在编写const成员函数时,不慎修改 数据成员,或者调用了其它非const成员函数,编译器将指出错误,这无疑会提高程序的健壮性。
const对象只能访问const成员函数;
非const对象可以访问任意的成员函数,包括const成员函数。
const对象默认调用const成员函数。
类中对象也可以直接在声明时,通过:(static) const int apple_1=10;初始化
二)static
静态变量:函数中、类中的变量
静态类的成员:类对象和类中函数
静态变量
1、函数中的静态变量
变量声明为static时,空间只分配一次,因此只能初始化一次。第二次不会再执行初始化。(如何函数被多次调用)
#但变量的值可以改变
只有初始化时的那一句话只会执行一次,其他均不影响。
这种变量可以用作计数器,且不用声明为全局变量。
2、类中的静态变量
类中的静态变量,由所有对象共享。
对于不同的对象,不能有相同静态变量的多个副本。
因此,类中的静态变量不能使用构造函数初始化。
类中的静态变量应由用户使用类外的类名和范围解析运算符显式初始化。
#在main函数中可以修改静态变量的值,但初始化一定要用刚刚的方式。
静态成员
3、类对象为静态
class Apple
如果在main函数中声明非静态的对象(if块内)
则:对象的生命周期仅在if块内
如果声明静态对象(if块内)
则:对象的生命周期为整个程序
#将在main()函数结束后,调用析构函数。
4、类中的静态函数
静态成员函数仅访问静态数据成员或其他静态成员函数
无法访问类的非静态数据成员或成员函数。