1、ifdef/define/endif的作用
防止头文件重新编译,以免出现编译错误或者编译效率低下的问题。
(1)定义常量,const定义的常量编译器可以对其进行数据静态类型安全检查;
(2)修饰函数形参,**当输入参数为用户自定义类型和抽象数据类型时,将“值传递”改为“const &传递”,可以提高效率;
(3)修饰函数返回值 ,给“指针传递”的函数返回值加const,则返回值不能被修改,且该返回值只能被赋值给加const修饰的同类型指针;
(4)修饰类成员函数(函数定义体)。
3、extern的作用(参考)
(1)置于变量或者函数前,以表示变量或者函数的定义在别的文件中。提示编译器遇到此变量或函数时,在其它模块中寻找其定义;
(2)extern也可用来进行链接指定;
4、extern "C" 的作用
在C++环境下使用C函数的时候,常常会出现编译器无法找到obj模块中的C函数定义,从而导致链接失败的情况,应该如何解决这种情况呢?
答案与分析:
C++语言在编译的时候为了解决函数的多态问题,会将函数名和参数联合起来生成一个中间的函数名称,而C语言则不会,因此会造成链接时找不到对应函数的情况,此时C函数就需要用extern “C”进行链接指定,这告诉编译器,请保持我的名称,不要给我生成用于链接的中间函数名。
5、static 的作用(参考1)
(1)隐藏。(static函数,static变量均可);
(2)保持变量内容的持久;
(3)默认初始化为0(static变量),位于静态存储区;
(4)C++中的类成员声明static。
静态数据成员(没有this指针)是类的成员,而不是对象的成员,必须进行初始化。
6、纯虚函数和虚函数作用
(1)纯虚函数是一种特殊的虚函数,在许多情况下,在基类中不能对虚函数给出有意义的实现,而把它声明为纯虚函数,它的实现留给该基类的派生类去做。
(2)虚函数则是为了实现多态,(多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。)