C 语言

关注公众号 jb51net

关闭
首页 > 软件编程 > C 语言 > C++ hpp文件

C++中的hpp文件及使用hpp文件的好处

作者:马上到我碗里来

hpp文件是C++程序中一种特殊头文件,它可以包含类的声明和实现,详细介绍了使用hpp文件的好处及注意事项,感兴趣的朋友跟随小编一起看看吧

1 什么是hpp文件?

hpp文件是C++程序中一种特殊头文件,它可以包含类的声明和实现。与传统的h文件相比,hpp文件具有以下特点:

2 使用hpp文件的好处

3 注意事项

与传统的h文件相比,hpp文件有很多优点,但是在编写hpp文件时也需要注意以下事项:

① 不可包含全局对象和全局函数

由于hpp文件本质上是作为h文件被调用者include,所以当hpp文件中存在全局对象或者全局函数,而该hpp被多个调用者include时,将在链接时导致符号重定义错误。要避免这种情况,需要去除全局对象,将全局函数封装为类的静态方法。

// 错误示例
#include <iostream>
int g_val = 0; // 全局对象
void print_val() {
  std::cout << g_val << std::endl;
}
// 正确示例
#include <iostream>
class MyClass {
 public:
  void print_val() {
    std::cout << m_val << std::endl;
  }
 private:
  int m_val = 0; // 类成员
};

② 类之间不可循环调用

如果hpp文件中包含多个类,并且这些类之间存在相互依赖关系,那么在编译时会导致循环依赖错误。为了避免这种情况,需要对类之间的依赖关系进行合理的设计,避免循环调用。

// 错误示例
#include <iostream>
class A {
 public:
  void foo(B& b) {
    // ...
  }
};
class B {
 public:
  void bar(A& a) {
    // ...
  }
};
// 正确示例
#include <iostream>
class A {
 public:
  void foo(B* b) {
    // ...
  }
};
class B {
 public:
  void bar(A* a) {
    // ...
  }
};

③ 不可使用静态成员

hpp文件中的静态成员在编译时会被编译到调用者的obj文件中,这会导致多个调用者共享同一个静态成员。如果静态成员发生变化,则会导致所有调用者都受到影响。因此,在hpp文件中应避免使用静态成员。

// 错误示例
#include <iostream>
class MyClass {
 public:
  static int s_val = 0; // 静态成员
  void print_val() {
    std::cout << s_val << std::endl;
  }
};
// 正确示例
#include <iostream>
class MyClass {
 public:
  void print_val() {
    int val = 0; // 局部变量
    std::cout << val << std::endl;
  }
};

④ 其他注意事项

// 示例
#include <iostream>
#include <vector>
#pragma once
using namespace std;
class MyClass {
 public:
  void print_val() {
    cout << m_val << endl;
  }
 private:
  int m_val = 0;
};

到此这篇关于C++中的hpp文件 的文章就介绍到这了,更多相关C++ hpp文件 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

阅读全文