C面试题汇总
1:
某个文件中定义的静态全局变量(或称静态局部变量)作用域是------本文件内2:C++中struct和class有什么区别?
①:默认继承权限:
class的继承按照private继承处理,struct的继承按照public继承处理
②:成员的默认访问权限
class的成员默认是private权限, struct默认是public权限
3:如何判断一段程序是由C编译程序(编译器)还是由C++编译程序编译的? #ifdef__cplusplus cout<<"c++"; #else cout<<"C"; #endif
注:C++有内置的宏__cplusplus -------有个习惯带"__"表示内部变量,只供内部使用;不带双下划线的,表示外部接口的变量(标识符)
4:C++函数中的值的传递方式有哪几种?
C++函数的三种传递方式为:值传递。指针传递 和 引用传递
注:值传递和指针传递,本质上就是指针传递。5:class A { vritual void func1(); void func2(); }; class B : class A { void func1(){ //标准的重写,他也是虚函数 } vritual void func2(){ } }
在A类中fun1是虚函数;B类中fun2是虚函数。
6: C和C++ 有什么不同?
①:机制上:c是面向过程的(c也可以是面向对象发的程序); C++是面向对象,提供了类。C++的面向对象的程序比c容易。
②:使用方向:c适合代码体积小的,效率高的场合,如嵌入式;C++更适合上层的,复杂的;Linux核心大部分是c写的,因为他是系统软件,效率要求极高
③:C++是c的超集;
④:C语言是结构化编程语言,C++是面向对象编程语言。
⑤:C++侧重于对象而不是过程,侧重于类的设计而不是逻辑设计。
7: C和C++中的struct有什么区别?(需要注意C和C++的标准,会有区别)
C中struct主要提供的是自定义类型,和构造一种新的类型出来;
一致的地方:
不一致的地方:
C语言: 无Protection行为; 不能定义函数,但可以有函数指针;
C++: 有Procetion行为,默认是private; 可以定义函数。
注: 就是访问权限,struct对于外部是完全访问的,C++是有访问权限设置的;
8:int id[sizeof(unsigned long)]; 这个对吗?为什么?
正确,sizeof是编译时运算符,编译时就确定了 可以看成是和及其有关的常量
注:定义数组的时候,数组的长度必须是一个确定的常量;
sizeof是一个运算符,如果他后面跟的是一个变量那么只有在运行的时候才知道长度。如果跟的是一个类型(类型是根据平台确定他就确定了),可以看成是一个常量;
9:"new"in c++ is a key word operator
10:实参和形参的区别;
形参:是在定义函数时指定的参数,在未调用时他们并不占用内存中的存储单元。只有在调用的时候才会被分配内存,调用结束后,形参所占用的内存单元会被释放
实参:即你调用函数时传递的参数;
11: 变量的指针含义是指变量的------地址
12:重载,重写,重定义的区别?
重载: 同一个名字空间----函数名相同,参数列表不同; 注释:理解成一个类里面的多个同名函数
重写/覆盖: 不同名字空间-----用于继承,子类重新定义父类中函数名相同,参数列表也相同虚函数 的方法
重定义/隐藏:重定义(隐藏)是指派生类的函数屏蔽了与其同名的基类函数,规则如下:
a 如果派生类的函数和基类的函数同名,但是参数不同,此时,不管有无virtual,基类的函数被隐藏。
b 如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有vitual关键字,此时,基类的函数被隐藏。
13: 多态的作用:
①:隐藏实现细节,使得代码能够模块化;扩展代码模块,实现代码重写
②:接口重用:为了使用多个派生类中某个派生类的属性正确调用
14: 用C++写个程序,如何判断一个操作系统是16位还是32位?不能用sizeof()函数。 int a=~0; if(a>65536) { cout<<"32bit"<