我有一个和有意思的朋友,他是一个很厉害的人。有一天,他问我敢不敢和他玩一个游戏,我当然说可以呀,毕竟我也不是一个怂人。这个游戏确实很有意思,一个模拟面试的游戏,我们可以互相的提问,关于面试的很多问题?下面这些问题是关于c++的,我把它们全部整理出来了。
答:①定义放面: 函数重载:在相同作用域下(如果有关键字const,那么他必须用来修饰指针或者引用),函数名相同,参数列表不同,不能仅依靠返回值。 覆盖:就是派生类和基类中函数名相同,并且参数列表页相同,返回值也相同。基类的同名函数必须是虚函数(被virtual修饰),派生类覆盖基类的同名函数。 ②使用方面:函数重载多用于运算符的重载,而覆盖多用于继承。 ③函数的确认:函数重载是在编译阶段确定需要调用那个函数,而覆盖是在运行的时候,才确定下来调用的是那个函数。 ④函数是否相同:函数重载是生成的符号不同,而覆盖相同的函数。 相同方面:函数名都是必须相同的。
答:该问题需要知道一点编译、链接的过程,这个我有一篇文章是关于编译、链接的。编译、链接小知识 我们都是c++中函数的模板很强大,一段代码,完成的类型很多的。 C++标准明确表示,当一个模板不被用到的时侯它就不该被实例化出来。如果模板函数和调用分别在不同.cpp文件里面,写函数的那个文件,在边界阶段由于没有接到什么指示说有人要用,所以就没有将它生成机器代码,可是那个调用的文件中,他要用呀!编译的时候,他寄希望于编译器,等到各个文件都被编译好,开始链接时,就出现了懒做现象,编译器只能报错了! 在分离式编译的环境下,编译器编译某一个.cpp文件时并不知道另一个.cpp文件的存在,也不会去查找(当遇到未决符号时它会寄希望于连接器)。这种模式在没有模板的情况下运行良好,但遇到模板时就傻眼了,因为模板仅在需要的时候才会实例化出来,所以,当编译器只看到模板的声明时,它不能实例化该模板,只能创建一个具有外部连接的符号并期待连接器能够将符号的地址决议出来。然而当实现该模板的.cpp文件中没有用到模板的实例时,编译器懒得去实例化,所以,整个工程的.obj中就找不到一行模板实例的二进制代码,于是连接器也黔驴技穷了。
答:关键字explicit加在构造函数前面。
答:有个do_brk()是分配前128k。有一个内存库,free之后没有归还操作系统而是放在内存库里面。 do_mmap()是分配后128k的内存,free直接交换内存的。 malloc分配的物理内存不连续,虚拟地址是连续。 注: 这个不详细,准备将详细的再写一篇文章。
答:可以,const 修饰的是这个this指针,指针指向不能改,但是指针的内容可以改。结果和 int *const p 相同。
答:32位下是12,64位下是24;说一下32位的吧! 这个得先说一下,vector发底层有3个指针:begin vector 、end vector 、vector capactiy。所以sizeof就是这三个指针的大小。