1.C++中const有什么作用?
(1)const用于定义常量:const定义的常量编译器可以进行数据静态类型安全检查。【个人感觉c++还是别用define的好】
(2)const修饰函数形参:当输入用户自定义类型和抽象数据类型时,应该将“值传递”改为“const&”传递,以提高效率。
(3)const修饰函数返回值:返回值不能被直接修改,且只能赋值给加const修饰的同类型指针。
(4)const修饰类的成员函数:任何不会修改数据成员的函数都应用const修饰。
2.static有什么作用?
(1)在函数体,一个被声明为静态的变量在这一函数调用过程中维持其值不变。
(2)在模块内(不在函数体内),一个静态变量可以被模块内所有函数访问,但不能被模块外其他函数访问。它是个本地的全局变量。
(3)一个被声明为静态的函数只可被这一模块内的其他函数调用。
3.有了malloc/free,为什么还要new/delete
对于非内部数据类型的对象而言,光是malloc/free无法满足动态对象的要求。对象需要执行构造、析构函数,由于malloc是库函数不是运算符,不在编译器控制权限之内,不能将执行构造、析构函数的任务强加于malloc和free。【都用new、delete没毛病,历史包袱而已】
4.有哪几种情况只能用initialization list,而不能用assignment?
当勒种含有const、reference成员变量和基类的构造函数时都需要初始化列表。
5.对于一个C++中的空类默认会产生那些类成员函数?
- 默认构造函数和复制构造函数。
- 析构函数。
- 赋值函数。
- 取值运算。
class Empty{
public:
Empty();
Empty(const Empty&)
~Empty();
Empty& operator=(const Empty&);
Empty* operator&;
}
6.构造函数explict与普通构造函数的区别
普通构造函数能够被隐式调用,而explicit构造函数能被显示调用。
7.C++中虚析构函数的作用是什么?
只有当一个类被当做基类时,才会把析构函数写作虚函数。子类 会先执行子类的析构函数,再执行 基类的虚析构函数,保证资源正常释放。
8.复制构造函数是什么?什么是深拷贝和浅拷贝?
复制构造函数是一种特殊的构造函数,它由编译器调用来完成一些基于同一类的其他对象的构造和初始化。
以下三种情况对象会调用复制构造函数:
(1)一个对象以致传递的方式传入结构体。
(2)一个对象以值传递方式从函数返回。
(3)一个对象需要通过另外一个对象进行初始化。
浅复制是指让新旧两个对象指向同一个外部的内容,而深复制是指为新对象制作外部对象的独立复制。