C++面试基础知识复习系列——一

1、const关键字的作用。

1>修饰变量,说明该变量不可修改;

2>修饰指针,分为常量指针与指针常量。

example1:

int* const p=&a;指针常量,*p=8,ok;p=&b,错误;

example2:

const int *p=&a;常量指针,*p=8,错误;p=&b,OK;

3>修饰引用,常用于形参类型,即有利于拷贝,又避免了函数对值的修改;

4>修饰成员函数,说明该成员函数内不能修改成员变量。

2、static 关键字的使用。

1>修饰普通变量,修改变量的存储区域与生命周期,使变量存储在静态区,在main函数之前就分配了空间,如果有初始值就用初始值去初始化它,没有初始值就用系统默认值初始化之。

2>修饰普通的函数,表明函数的作用范围(有疑问)。

3>修饰成员变量。所有该类的对象只保存一个该变量,而且不需要生成对象就可以访问该成员(静态成员变量的内存分配?)。

4>修饰成员函数。不需要生成对象就可以访问该函数,但是,在static函数内部不能访问非静态成员成员。

3、this指针。

1>this指针是一个隐含于成员函数中的特殊指针,它指向正在被该成员函数操作的那个对象;

2>this是右值,无法取址。

4、inline内联函数。

特点:

1>相当于把函数内容写在调用内联函数的地方;

2>不用执行进入函数的步骤,直接执行函数体(?);

3>相当于宏。但比宏多了类型检查;

4>不能包含复杂的操作;

5>类中除了虚函数都会被自动隐式转换成内联函数。

5、虚函数能否是内联函数?

1>可以。但是当虚函数表现出多态的特性时,不能内联;

2>内联是编译期内联。而虚函数的多态性在运行期间,编译器无法知道在运行期间调用哪个代码。

3>编译器知道所调用的对象是哪个类时,可以将虚函数内联。

6、assert;

7、sizeof(数组名)/sizeof(指针);

8、#pragma pack(n)

9、位域;

10、extern

1>被extern限定的函数/变量是extern类型的。即这些变量/函数的定义在其他模块。

2>extern "C"的作用是让C++编译器将extern "C"声明的代码当C语言处理。

11、union。

定义:是一种节省空间的特殊的类,一个union类可以有多个数据成员,但是在任意一个时刻只能有一个数据成员有值。当某个数据成员被赋值后,其他数据成员处于未定义状态。

12、成员初始化列表。

1>高效?

2>有些场合必须要用初始化列表:

i、常量类型。因为常量类型只能初始化,不能赋值,因此必须放在初始化列表;

ii、引用类型。引用必需在定义的时候初始化,且不能重新被赋值,所以也要写在初始化列表里面;

iii、???

13、C++多态。静态多态:函数重载;动态多态,虚函数;

14、虚函数?

1>普通函数(非类的成员函数)不能是虚函数;

2>静态函数不能是虚函数;

3>构造函数不能是虚函数(因为在调用构造函数时,虚表指针并没有在对象的内存空间中,必须要构造函数调用完成之后才能形成虚表指针)。

15、虚析构函数。

使用场合:

为了解决基类的指针指向派生类的对象,并用基类的指针删除派生类的对象。

16、虚函数表。

参考:

1:https://mp.weixin.qq.com/s/u_CiVTGwv7m6lwl8XT7Dzw;

2:https://mp.weixin.qq.com/s/fsA9p9GC5rkXZISeKknqbQ;

猜你喜欢

转载自blog.csdn.net/weixin_40825228/article/details/82621750