C++面试常见问答题看这三篇文章就够了(上)
目录
3. 重载(overload)和重写(overried)的区别
29. 已知函数 int fun( int i ),如何声明对应的函数指针pfunc?
31. 对于派生类的构造函数,创建对象时构造函数执行的顺序为?
32. 什么情况下,成员变量只能用初始化列表?
前言
《C++面试常见问答题看这三篇文章就够了(上)》本文
正文
1. 标识符的组成结构
标识符一般遵循三个规则:
1)由字母、数字和下划线组成。
2)开头必须是字母或者下划线。
3)不能使用C关键字。
2. 动态关联和静态关联的区别
通过基类指针调用虚函数的方式是动态关联,通过对象调用虚函数的方式是静态关联。
3. 重载(overload)和重写(overried)的区别
重载:是指函数名相同,而参数列表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。
重写:是指子类重新定义父类虚函数的方法。和多态真正相关。
4. class和struct的区别
1)class中成员默认是private,struct中成员默认是public。
2)在继承关系中,class默认是private,而struct默认是public。
3)class可用于定义模板参数,但是strcut不能。
5. 构造方法的特点
1)构造方法的方法名必须与类名相同。
2)构造方法没有返回类型,也不能定义为void,在方法名前面不声明方法类型。
3)构造方法的主要作用是完成对象的初始化工作,它能够把定义对象时的参数传给对象的域。
4)构造方法不能由编程人员调用,而要系统调用。
5)一个类可以定义多个构造方法,如果没有定义构造方法,编译系统会自动插入一个默认的无参构造方法,这个构造方法不执行任何代码。
6)构造方法可以重载,以参数的个数,类型,或排列顺序区分。
6. 面向对象编程的三大特征
继承、封装、多态。
7. 当宏定义需要定义多行代码时使用哪个符号?
转义字符\,注意不是/,不要混淆。
⚠️特别是在做选择题的时候,不要弄混!
8. 类A只有一个成员函数,则sizeof(A)的大小?
sizeof(A)=1,C++标准规定类的大小不为0,空类的大小为1,当类不包含虚函数和非静态数据成员时,其对象大小也为1。其中,类的大小与它的构造函数、析构函数以及其他成员函数无关,只与它的数据成员相关。这里有一个类比公式:类的大小 = 虚函数指针 + 所有非静态数据成员大小 + 因对齐多占的字节大小。
9. 如何引用一个已经定义过的全局变量?
用extern关键字方式。
10. 什么是自动变量
一般情况下,不作专门说明的局部变量,均是自动变量。自动变量也可用关键字auto作出说明。
11. 内联函数的一般特点
1)不是任何一个函数都可定义成内联函数。
2)内联函数的函数体内不能含有复杂的结构控制语句。
3)内联函数一般适合于只有1~5行语句的小函数。
12. 服务器和客户端怎么创建socket
ServerSocket(int port) 是服务端绑定port端口,调accept()监听等待客户端连接,它返回一个连接队列中的一个socket。
Socket(InetAddress address , int port)是创建客户端连接主机的socket流,其中InetAddress是用来记录主机的类,port指定端口。
13. clone和fork的关系
clone是fork的升级版本,不仅可以创建进程或者线程,还可以指定创建新的命名空间(namespace)、有选择的继承父进程的内存、甚至可以将创建出来的进程变成父进程的兄弟进程等。
14. 类继承与权限变化
类成员 / 继承方式 | public继承 | protected继承 | private继承 |
---|---|---|---|
基类的public成员 | public | protected | private |
基类的protected成员 | protected | protected | private |
基类的private成员 | private (在派生类中不可见) | private (在派生类中不可见) | private (在派生类中不可见) |
15. 函数 rewind的作用
使位置指针重新返回文件的开头。
16. 哪些常见函数不能声明为虚函数?
普通函数(非成员函数),静态成员函数,内联成员函数,构造函数,友元函数。
17. C和C++的区别
1)C语言是面向过程的语言,他的核心是函数。
2)C++是面向对象的语言,他的核心是类和对象。
3)C++是c语言的超集。
18. 运算符重载以后,其优先级可以改变吗?
不可以!
19. C++处理异常机制的组成部分
检查、抛出、捕获。
20. C++中函数参数传递有几种类型
值传递、指针地址传递、引用传递。
21. 如何判断一段程序是C还是C++编译的?
#ifdef __cplusplus
cout<<"c++";
#else
cout<<"c";
#endif
22. C/C++的内存有哪几种类型?
内存有五种类型:堆(malloc)、栈(如局部变量、函数参数)、程序代码区(存放二进制代码)、全局/静态存储区(全局变量、static变量)和常量存储区(常量)。
全局变量、static变量会初始化为零,而堆和栈上的变量是随机的,不确定的。
23. 一个32位的机器,其指针占多少字节?
4字节。
24. 程序编译成可执行程序四个的过程
预处理、编译、汇编和链接。
25. C++中四种强制类型转换
1)static_cast
a. 用于基本类型间的转换。
b. 不能用于基本类型指针间的转换。
c. 用于有继承关系类对象间的转换和类指针间的转换。
2)dynamic_cast
a. 用于有继承关系的类指针间的转换。
b. 用于有交叉关系的类指针间的转换。
c. 具有类型检查的功能。
d. 需要虚函数的支持。
3)reinterpret_cast
a. 用于指针间的类型转换。
b. 用于整数和指针间的类型转换。
4)const_cast
a. 用于去掉变量的const属性。
b. 转换的目标类型必须是指针或者引用。
26. 变量i是int类型,++i和i++哪个更快一点?
理论上++i更快,实际上与编译器优化有关,一般差别不大。
27. 转换构造函数的作用
转换构造函数(conversion constructor function) 的作用是将一个其他类型的数据转换成一个类的对象。
注意:转换构造函数只能有一个参数。如果有多个参数,就不是转换构造函数。如果有多个参数的话,就不知道是把哪个参数转换成Complex类的对象了。
28. gcc和g++的区别
小写gcc和大写GCC是两个不同的东西,GCC:GNU Compiler Collection(GUN 编译器集合),它可以编译C、C++、JAVA、Fortran、Pascal、Object-C等语言。
gcc是GCC中的GUN C Compiler(C 编译器);
g++是GCC中的GUN C++ Compiler(C++编译器);
另外,二者的主要区别还有:
1)对于 *.c和*.cpp文件,gcc分别当做c和cpp文件编译(c和cpp的语法强度是不一样的)。
2)对于 *.c和*.cpp文件,g++会统一当做cpp文件编译。
3)使用g++编译文件时,g++会自动链接标准库STL,而gcc不会自动链接STL。
4)gcc在编译C文件时,可使用的预定义宏是比较少的。
5)当gcc在编译cpp文件或者g++在编译c文件和cpp文件时(这时候gcc和g++调用的都是cpp文件的编译器),会加入一些额外的宏,这些宏如下:
#define __GXX_WEAK__ 1
#define __cplusplus 1
#define __DEPRECATED 1
#define __GNUG__ 4
#define __EXCEPTIONS 1
#define __private_extern__ extern
6)在用gcc编译c++文件时,为了能够使用STL,需要加参数 -lstdc++ ,但这并不代表 gcc -lstdc++ 和 g++是等价的。
29. 已知函数 int fun( int i ),如何声明对应的函数指针pfunc?
int(*pfunc)(int);
30. 友员函数有哪些特性?
1)友元函数是一种在类外定义,在类内特殊声明(加关键字friend)的函数。
2)可以在类外访问类的所有成员的非成员函数。
3)友元函数相对于普通函数,增加了访问类成员的权利。
4)友元函数可以像普通函数一样直接调用,不需要通过对象或指针。
5)友元函数不是成员函数,所以不能被继承,也同样没有this指针。
6)友元函数和普通函数的区别在于是否具有访问类成员的权利。
7)友元函数在一定程度上破坏了类的封装特性。
31. 对于派生类的构造函数,创建对象时构造函数执行的顺序为?
1)基类的构造函数。
2)成员对象构造函数。
3)派生类本身的构造函数。
记忆方式:先父母,再客人,后自己。
32. 什么情况下,成员变量只能用初始化列表?
1)当类中含有const成员变量。
2)当类中含有reference成员变量。
文章来源: liuzhen.blog.csdn.net,作者:Data-Mining,版权归原作者所有,如需转载,请联系作者。
原文链接:liuzhen.blog.csdn.net/article/details/109700879
- 点赞
- 收藏
- 关注作者
评论(0)