c++面试题中经常被面试官面试的小问题总结(一)(本篇偏向基础知识)

news/2024/7/5 3:38:17

 

 

原文作者:aircraft

原文链接:https://www.cnblogs.com/DOMLX/p/10711810.html

 

 

1.类中的函数定义后加了一个const代表什么?

 

代表它将具备以下三个性质:1.const对象只能调用const成员函数。2.const对象的值不能被修改,在const成员函数中修改const对象数据成员的值是语法错误3.在const函数中调用非const成员函数是语法错误任何不会修改数据成员的函数都应该声明为const类型。
  如果在编写const成员函数时,不慎修改了数据成员,
 或者调用了其它非const成员函数,编译器将指出错误,这无疑会提高程序的健壮性。
 所以看完上面这句话就应该明白了函数定义后加const的用处,以及什么时候用到const,这会是一个好的编程习惯的。
以下程序中,类stack的成员函数GetCount仅用于计数,从逻辑上讲GetCount应当为const函数。编译器将指出GetCount函数中的错误。 class Stack {public: void Push(int elem); int Pop(void); int GetCount(void) const; // const成员函数private: int m_num; int m_data[10]; };int Stack::GetCount(void) const { ++ m_num; // 编译错误,企图修改数据成员m_num Pop(); // 编译错误,企图调用非const函数 return m_num; }

 

 2.#include<>与#include""的区别?

 

<>表明这是一个工程或者标准头文件。查找过程会首先检查预定义的目录,我们可以通过
设置搜索路径环境变量或者命令行选项来修改这些目录、“”表明该文件是用户自定义的头文件,查找时应从当前目录或者指定目录查找。总结:自己的定义的头文件用双引号导入,像库文件之类的标准头文件用<>导入

 

 

3.c++中的双冒号::

1、表示“域操作符”
例:声明了一个类A,类A里声明了一个成员函数void f(),但没有在类的声明里给出f的定义,那么在类外定义f时,
就要写成void A::f(),表示这个f()函数是类A的成员函数。2、直接用在全局函数前,表示是全局函数
例:在VC里,你可以在调用API 函数里,在API函数名前加::3、表示引用成员函数及变量,作用域成员运算符 4、变量前面的双冒号::,代表引用全局变量,比如我在全局定义了一个全局变量 int value = 1; 局部函数内又定义了一个 int value = 2; 而在这个局部函数中我想给全局那个变量赋值就这样 ::value = 250;

 

4.宏参数的连接,#和##符号的作用。

某面试题:求下面输出结果
一般用法   我们使用#把宏参数变为一个字符串,用##把两个宏参数贴合在一起.#define STR(s)      #s  #define CONS(a,b)   int(a##e##b)printf(STR(vck));            // 输出字符串"vck" printf("%d\n", CONS(2,3)); // 2e3 输出:2000 

 

5.static定义的函数如何在其他文件调用?(不能在其他文件直接调用!!!)

1. 通过函数指针的方式, 我们只要得到这个函数的地址,那么就一定可以调用它,
大家要知道static函数是对编译器起作用的,在运行时根本没有static了,有的只是函数地址,
所以只要搞到函数地址管它是不是static的,照调不误,
2. 通过非static函数的方式,我们可以定义一个普通的函数,
让这个普通函数调用static函数,让后在把这个普通函数在头文件中声明 举例:利用可在本文件调用的属性,另加一个函数fun,fun调用该static函数;其他文件调用fun即可。另外,要强调,extern不能作用在static函数

 

6.sizeof计算变量空间容易出错的地方?

某面试题:
char str[] = "hello"; sizeof(str)=_?_ void Func(char str[100]) { sizeof(str)=_?_ } 第一个答案是6,因为对数组变量进行sizeof运算的时候得到的是数组占用内存。 第二个答案是4,在函数中形参的作用是传址,本质是一个指针,指向了一个str[100]。 某面试题: class A { public: char c1; int i; char c2; }; int main() { printf("%d",sizeof(A)); return 0; }
问输出是多少?
  很多人都是直接相加求值,但是sizeof对类以及结构体作用时会有一个字节对齐机制,
对齐机制的对齐方式为其最大成员对齐方式,会将定义变量的内存补全,方便系统运算。
c1的偏移量为0,i的偏移量为4,c1与i之间便需要3个字节填充。
c2的偏移量为8,那么结果就是1+3+4+1=9,由于这里最宽的字节
为int,4个字节。补全之后答案为12. 这里吧Int换成double的话答案就是24

也可以自己手动是设置对齐方式,只要在程序的开头部分 加上一句 #pragma pack(x)

 

 

7.内联函数与宏的区别?

1、内联函数在编译时展开,宏在预编译时展开。
2、在编译的时候,内联函数可以被镶嵌到代码中,而宏只是一个简单的文本替换。
3、宏不是函数,inline是函数。 4、宏在定义的时候容易因为二义性出错,而内联函数不会。

 8.内联函数比宏优势在什么地方?

 

 

 

9.为什么不把所有函数都定义成内联函数呢?

 

10.下面输出为多少?(某年微软面试题)

int func(x) 
{ int countx = 0;   while(x)    {     countx ++;     x = x&(x-1);    }   return countx; } 假定x = 9999。 答案:8 思路:将x转化为2进制,看含有的1的个数。

 

本篇是第一篇面试题总结,后面还有好多篇,想要剑指offer的关注我把!!!

转载于:https://www.cnblogs.com/DOMLX/p/10711810.html


http://lihuaxi.xjx100.cn/news/235786.html

相关文章

各种小的 dp (精)

Q~ 抛一枚硬币 n 次&#xff0c;每次可能是正面或者反面向上&#xff0c;求没有连续超过 k 次硬币向上的方案数 A &#xff1a; dp[ i ] 表示到 i 位置的方案数&#xff0c; 1 . 当 i < k 时&#xff0c; dp[i] dp[i-1]*2 2 . 当 i k 时&#xff0c; dp[i] dp[i-1]*2 - 1…

SAP有用的NOTE(持续更新)

目录 2421240 - Portal is not loaded on Chrome 56 or higher. 66971 - Supported SAP GUI platforms 66971 - Supported SAP GUI platforms 1999880 - FAQ: SAP HANA System Replication 2250144 - FAQ: SAP HANA Secure User Store 2222200 - FAQ: SAP HANA Network …

Google AI 系统 DeepMind无法通过 高中数学

Google 旗下 DeepMind 团队让 AI 系统接受一项高中程度的数学测试&#xff0c;结果在 40 道题目中只答对了 14 题&#xff0c;甚至连「1111111」也算错了。说来难以置信&#xff0c;Google AI 系统能打败人类世界棋王&#xff0c;却无法通过高中程度的数学考试。上周&#xff0…

ie9下console不兼容的问题

最近在调整项目在ie9下的展示问题&#xff0c;发现在ie9下&#xff0c;js文件不执行&#xff0c;打开控制台才执行&#xff0c;原因是ie9不支持console&#xff0c;以下给出两种解决方案&#xff1a;1. 在webpack.prod.conf.js 中添加并修改js插件配置项&#xff08;我用的是we…

SAP有用的知识(持续更新)

一、安装SAP 1.1、产品可用性矩阵&#xff08;Product Availability Matrix&#xff09; SAP官网-Maintenance-Product Availability Matrix&#xff0c;点击页面的Access the Product Availability Matrix。 选中你公司授权的商品&#xff08;Licensed Products&#xff09…

docker上传自己的镜像

https://blog.csdn.net/boonya/article/details/74906927 需要注意的就是命名规范 docker push 注册用户名/镜像名 tag命令修改为规范的镜像&#xff1a; docker tag boonya/tomcat-allow-remote boonyadocker/tomcat-allow-remote转载于:https://www.cnblogs.com/MC-Curry/p/1…

网络管理员比赛回顾01-基本操作和简单vlan

目录 一、模拟器eNSP 二、基本操作 三、配置IP地址 四、VLAN 一、模拟器eNSP 使用eNSP模拟器&#xff0c;来源于网络上的安装包&#xff0c;学习一个。基本操作就不多说了&#xff0c;在实践里慢慢记录 二、基本操作 认识3种视图&#xff1a;用户视图、系统视图、接口视…

datatable无法设置横向滚动条(设置无效)

datatable设置横向滚动条无效 js如下&#xff1a; 页面如下&#xff1a; 设置 scrollx 属性为true时&#xff0c;还需在 table 添加 style"white-space: nowrap; "最终效果&#xff1a; 转载于:https://www.cnblogs.com/renzp/p/10069594.html