01
static和const关键字的作用
static:
1 修饰普通变量,修改变量的存储区域和生命周期,使变量存储在静态区,在main函数运行前就分配了空间,如果有初始值就用初始值初始化它,没有初始值系统用默认值初始化它;
2 修饰普通函数,表明函数的作用范围,仅在定义该函数的文件内才能使用。在多人开发项目时,为了防止与他人命令函数重名,可以将函数定位为static;
3 修饰成员变量,使所有的对象只保存一个该变量,且不需要生成对象就可以访问该成员;
4 修饰成员函数,使得不需要生成对象就可以访问该函数,但是在静态函数内不能访问非静态成员。
const:
1 要阻止一个变量被改变,可以使用const关键字。在定义该const变量时,通常需要对其进行初始化,因为以后就没有机会再去改变它了;
2 对指针来说,const可以修饰指针本身,也可以修饰指针所指的数据,或二者同时指定为const;
3 在函数声明中,const可修饰形参,这表明在函数内部不能改变其值;
4 对于类的成员函数,若指定其为const,则表明其是一个常函数,不能修改类的成员变量。
02
const与#define的区别
1 const可以用来定义常量、修饰函数参数、修饰函数返回值。被const修饰的东西受到强制保护,能提高程序的健壮性。
2 const 常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。
3 可以对const常量进行调试,但是不能对宏常量进行调试。
4 #define只在编译预处理阶段起作用,const在编译和运行阶段都起作用。
03
C++和C的区别
设计思想方面:
C++是面向对象,而C是面向过程(举例 大象装冰箱)
语法方面:
C++有封装、继承和多态三大特性
C++相比C,增加多许多类型安全的功能,比如强制类型转换
C++支持范式编程,比如模板类、函数模板等
04
C++中的四种类型转换是什么
1 const_cast
用于将const变量转为非const
2 static_cast
用于各种隐式转换,比如非const转const,void*转指针等,static_cast能用于多态向上转化,如果向下转能成功但是不安全,结果未知;
向上转换:子类向基类的转换
向下转换:基类向子类的转换
3 dynamic_cast
用于动态类型转换。只能用于含有虚函数的类,用于类层次间的向上和向下转化。只能转指针或引用。向下转时,如果是非法的,对于指针返回NULL,对于引用抛异常。
它通过判断在执行到该语句的时候变量的运行时类型和要转换的类型是否相同来判断是否能够进行向下转换。
4 reinterpret_cast
几乎什么都可以转,比如将int转指针,可能会出问题,尽量少用;
05
C++中指针和引用的区别
1 指针有自己的一块空间,引用只是一个别名;
2 sizeof一个指针的大小32位系统下是4,64位系统下是8,而引用则是被引用对象的大小;
3 指针可以被初始化为NULL,引用必须被初始化且必须是一个已有对象
的引用;
4 作为参数传递时,指针需要被解引用才可以对对象进行操作,而对引用的修改都会改变引用所指的对象;
5 有const指针,但没有const引用;
6 指针在使用中可以指向其它对象,但是引用只能绑定一个对象,不能被改变;
7 有多级指针(**p),而引用只有一级;
8 指针和引用使用++运算符的意义不一样;
9 若返回动态内存分配的对象或内存,须使用指针,引用可能会引起内存泄露。
声明一个引用的时候,要对其进行初始化。声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元。不能建立数组的引用。
06
值传递