C++ 笔记(面试总结 一 )

C++面试问题总结(一)

1.static

static + 全局变量 = 全局静态变量
两者都是使用静态存储方式,但是全局变量作用域是全局的,整个源程序的源文件都可以访问,而全局静态变量只有定义的源文件可以访问。
static全局变量只初始化一次,防止在其他文件单元中引用。

static + 局部变量 = 局部静态变量
前者是用栈储存,后者是数据区储存,生命周期变长

static函数在内存中只有一份,不能访问非static变量。
普通函数在每个被调用中维持一份拷贝储存在栈中。

可以在被多个源文件包含的头文件中声明static全局变量,但只能有一个源文件对其赋值。而且不需要创建对象就可以访问,所以要先于对象存在,要在类外初始化。

2.const
const变量表示只读
用const来修饰指针

const int* a;  //const修饰指向类型,表示指向的a为常量,a值不可变,指针可以指向其它地址
int* const a ; //指针本身为常量,不可以修改其指向其它地址

const修饰函数int add (int a,int b) const { ....}
不能修改对象的成员变量,也不能调用非const函数

3.函数传参

传值:函数开始时形成栈帧,形参是实参的拷贝,改变形参不会改变实参
传指针:函数开始时形成栈帧,形参就是实参的地址,可改变实参
传引用:引用定义出来的形参变量相当于实参变量的别名,也就是说形参等同于实参,它们虽是两个不同的变量名,指向的是同一块内存地址,对形参操作实参也会改变。

4.c和c++区别
对语言本身而言,C是C++的子集,那么是什么样的一个子集? C实现了C++中过程化控制及其它相关功能,而在C++中的C(我称它为“C+”),相对于原来的C还有所加强,引入了重载、内联函数、异常处理等等玩意儿,C++更是拓展了面向对象设计的内容,如类、继承、虚函数、模板和包容器类等等。

5.java和c++

通常,我们聊到Java,第一印象“面向对象”,“没有指针,编写效率高,执行效率较低”。更深入、专业一点就谈论 “java内存自动回收(GC垃圾回收机制),多线程编程”。
java的三大特性是封装、继承和多态。

1、 JAVA的应用在高层,C++在中间件和底层

2、 JAVA离不开业务逻辑,而C++可以离开业务为JAVA们服务

3、 java语言给开发人员提供了更为简洁的语法;取消了指针带来更高的代码质量;完全面向对象,独特的运行机制是其具有天然的可移植性。

4、 java 是运行在JVM上的,之所以说它的可移植性强,是因为jvm可以安装到任何的系统

5、 c++不是不能在其他系统运行,而是c++在不同的系统上运行,需要不同的编码(这一点不如java,只编写一次代码,到处运行)。java程序一般都是生成字节码,在JVM里面运行得到结果。

6、 java 在web 应用上具有c++ 无可比拟的优势

7、 java在桌面程序上不如c++实用,C++可以直接编译成exe文件,指针是c++的优势,可以直接对内存的操作,但同时具有危险性 。(操作内存的确是一项非常危险的事情,一旦指针指向的位置发生错误,或者误删除了内存中某个地址单元存放的重要数据,后果是可想而知的)。

8、 垃圾回收机制的区别。c++用析构函数回收垃圾,java自动回收(GC算法),写C和C++程序时一定要注意内存的申请和释放。

9、 java 丰富的插件是java 发展如此迅速的原因
10、 java 很大的沿袭了c++的一些实用结构
11、 对于底层程序的编程以及控制方面的编程,c++很灵活,因为有句柄的存在。

Java并不仅仅是C++语言的一个变种,它们在某些本质问题上有根本的不同:

(1)Java比C++程序可靠性更高。有人曾估计每50行C++程序中至少有一个BUG。姑且不去讨论这个数字是否夸张,但是任何一个C++程序员都不得不承认C++语言在提供强大的功能的同时也提高了程序含BUG的可能性。Java语言通过改变语言的特性大大提高了程序的可靠性。

(2)Java语言不需要程序对内存进行分配和回收。Java丢弃了C++ 中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。特别地,Java语言不使用指针,并提供了自动的废料收集,在Java语言中,内存的分配和回收都是自动进行的,程序员无须考虑内存碎片的问题。

(3)Java语言中没有指针的概念,引入了真正的数组。不同于C++中利用指针实现的“伪数组”,Java引入了真正的数组,同时将容易造成麻烦的指针从语言中去掉,这将有利于防止在c++程序中常见的因为数组操作越界等指针操作而对系统数据进行非法读写带来的不安全问题。

(4)Java用接口(Interface)技术取代C++程序中的多继承性。接口与多继承有同样的功能,但是省却了多继承在实现和维护上的复杂性。

猜你喜欢

转载自blog.csdn.net/weixin_42927264/article/details/88424977