学习侯捷c++面向对象高级开发时培养大气的编程习惯几个注意事项(一)

本文分享了在学习侯捷老师的C++面向对象高级开发课程时的两大编程技巧:使用防卫式声明避免头文件重复包含导致的重复定义问题,以及在构造函数中使用初值列提升初始化效率,对C++初学者特别有帮助。

培养大气的编程习惯几个注意事项(一)

主要是在学习侯捷老师的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文件中找初值的定义,如果有初值列则直接就找到了初值定义,速度更快。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值