关键字:extern ;什么时候类 对象 方法 定义在.h中;

2 关键字:extern 结论就是 严格是extern应该和头文件一起使用, 但是项目简单就可以直接使用?

在简单的项目或者临时的测试代码中,直接使用extern关键字而不通过头文件来声明外部函数或变量是可以的,这种情况下可能会更快捷一些。但是,即使在小型项目中,随着项目的增长,这种做法可能会导致难以维护和潜在的错误。

在更复杂或者长期维护的项目中,严格使用头文件来声明extern变量和函数是非常重要的。这样做有助于确保代码的可读性和可维护性,并且使得其他开发者更容易理解代码结构。

因此,最佳实践是:

  • 对于简单、一次性或者个人使用的小项目,可以直接使用extern关键字。
  • 对于需要团队协作、长期维护或者复杂度较高的项目,应该始终通过头文件来声明extern变量和函数。

3 函数定义在.h 和定义在.cpp中有没有区别 我在使用中 #include .h .cpp 好像都行?

在C++中,通常函数的声明(也就是函数的原型)放在头文件(`.h`或`.hpp`)中,而函数的定义(也就是函数的具体实现)放在源文件(`.cpp`)中。这样做的原因和好处如下:

1. **编译器优化**:源文件中的函数定义可以被编译器优化,而头文件通常只包含声明,这意味着头文件可以被多个源文件包含而不会导致重复定义。

2. **链接**:当多个源文件包含同一个头文件时,如果头文件中包含了函数定义,那么每个包含了这个头文件的源文件都会有一个函数的副本,这将导致链接错误,因为同一个函数有了多个定义。

3. **编译时间**:如果将函数定义放在头文件中,每次头文件被修改后,所有包含了这个头文件的源文件都需要重新编译,这可能会导致不必要的长编译时间。

4. **封装**:将函数声明与定义分离可以隐藏实现细节,只向使用者展示接口,这是封装原则的一部分。类对象成员调用间的隐藏,主要是通过public/private来控制类内部访问权限,隐藏细节。

然而,在某些情况下,你可能会在头文件中看到函数定义:

-5 **内联函数**:为了提高效率,小的函数可以在头文件中定义为内联函数(使用`inline`关键字),这样做可以减少函数调用的开销。
  
- 6**模板**:模板类或函数通常在头文件中定义,因为编译器需要在实例化模板时看到完整的定义。

当你使用`#include`来包含一个`.cpp`文件时,你其实是在每个包含它的文件中复制粘贴了`.cpp`文件的内容。这通常是不推荐的做法,因为它会导致上述提到的链接错误和其他潜在问题。

总结来说,最佳实践是在头文件中声明函数,在源文件中定义函数。只有在特定情况下(如内联函数或模板),才会在头文件中定义函数。

4 在.h中定义

4.1 内联函数

#ifndef EXAMPLE_INLINE_H
#define EXAMPLE_INLINE_H

// 内联函数定义
inline void doSomethingInline() {
    // 快速执行的代码
}

#endif // EXAMPLE_INLINE_H

内联函数通常是小而频繁调用的函数,将其定义为内联可以减少函数调用的开销。内联函数的定义通常放在头文件中,因为编译器在编译时需要看到完整的定义来决定是否进行内联。

4.2 模板

#ifndef EXAMPLE_TEMPLATE_H
#define EXAMPLE_TEMPLATE_H

// 模板函数定义
template 
T add(T a, T b) {
    return a + b;
}

#endif // EXAMPLE_TEMPLATE_H

由于模板的特殊性,模板定义(包括类模板和函数模板)通常也放在头文件中。编译器需要在实例化模板时看到其完整的定义。

在实践中,你应该始终遵循将声明放在头文件、定义放在源文件的原则,除非是上述特殊情况。这样做有利于减少编译依赖,提高编译效率,并且使得代码结构更加清晰。

你可能感兴趣的:(c++,前端,windows,html)