Q1: Heap与stack的差别
A:
Heap是堆,stack是栈。
Stack的空间由操作系统自动分配/释放,Heap上的空间手动分配/释放。
Stack空间有限,Heap是很大的自由存储区
C中的malloc函数分配的内存空间即在堆上,C++中对应的是new操作符。
程序在编译期对变量和函数分配内存都在栈上进行,且程序运行过程中函数调用时参数的传递也在栈上进行
Q2: 重载(overload)、重写(override,有的书也叫做“覆盖”)、重定义(redefinition)的区别?
A:
Q3: 多态的作用?
A:
主要是两个:
- 隐藏实现细节,使得代码能够模块化;扩展代码模块,实现代码重用;
- 接口重用:为了类在继承和派生的时候,保证使用家族中任一类的实例的某一属性时的正确调用。
Q4: 当一个类A 中没有声明任何成员变量与成员函数,这时sizeof(A)的值是多少?
A:
空类在实例化时编译器会隐式增加一个字节以分配内存
05: 谈谈你是怎么认识c++中的模板的?
A:
模板使程序员能够快速建立具有类型安全的类库集合和函数集合,它的实现,方便了大规模的软件开发。(结合stl更好)
Q6:请你谈谈你在类中如何使用const的。
A:
有时我们希望某些常量只在类中有效。由于#define 定义的宏常量是全局的,不能达到目的,于是想当然地觉得应该用 const 修饰数据成员来实现。const 数据成员的确是存在的,但其含义却不是我们所期望的。const 数据成员只在某个对象生存期内是常量,而对于整个类而言却是可变的,因为类可以创建多个对象,不同的对象其 const 数据成员的值可以不同。 不能在类声明中初始化 const 数据成员。
const 数据成员的初始化只能在类构造函数的初始化表中进行。
Q7: 如何打印出当前源文件的文件名以及源文件的当前行号?
A:
cout << FILE ;
cout<<LINE ;
__FILE__和__LINE__是系统预定义宏,这种宏并不是在某个文件中定义的,而是由编译器定义的。(c也有)