培养大气的编程习惯几个注意事项(一)
主要是在学习侯捷老师的c++面向对象高级开发时遇到的一些注意的点,对初学者面向对象编程有很大的帮助。
1.Header (头文件) 中的防卫式声明

防卫式声明的作用:
避免了编译器在编译阶段重复包含同一段声明,防止由于同一个头文件被包含多次,而导致了重复定义。具体带来的影响可以看下面这个例子。
– “Car.h”,代码如下(并没有添加防卫式声明):

– “Person.h”,代码如下(包含了Car.h文件):

– 在"main.cpp"中,我们同时include两个头文件:

此时,我们会发现编译出错:Redefinition of ‘Car’.
可是为什么会出现这样的情况呢?
我们需要知道,在预编译阶段,编译器会把.h文件展开,即main.cpp中的代码可以看做是:
class Car
{
// ...
};
class Car
{
// ...
};
class Person
{
public:
Car car;
};
int main(int argc, const char * argv[]) {
Person p;
}
所以,我们可以知道防卫式声明的作用是:防止由于同一个头文件被包含多次,而导致了重复定义。
2.写构造函数时是否用到了初值列(initialization list)
这也是考察你是否经受过系统训练的一个点,在我们写构造函数的时候编译器给了我们一个赋初值的机会,具体形式如下画红线处所示:

这样做有两点好处:
1.证明大家是受过专业训练的。
2.编译时,在初值列处定义初值比在构造函数的{ }中定义初值更快,这是因为编译时系统是先调用头文件中的构造函数,如果没有初值列,然后在去cpp文件中找初值的定义,如果有初值列则直接就找到了初值定义,速度更快。
本文分享了在学习侯捷老师的C++面向对象高级开发课程时的两大编程技巧:使用防卫式声明避免头文件重复包含导致的重复定义问题,以及在构造函数中使用初值列提升初始化效率,对C++初学者特别有帮助。
975

被折叠的 条评论
为什么被折叠?



