• 【C++】源文件.cpp和头文件.h分离编程


    优势介绍

    将C++代码分为头文件(.h)和源文件(.cpp)的做法有以下几个好处:

    模块化和代码组织:将函数和类的声明(包括函数原型、类的成员和属性等)放在头文件中,将函数和类的实现(具体的函数逻辑、成员函数的定义等)放在源文件中。这种分离有助于对代码进行模块化和组织,使代码更加清晰和可维护。头文件可以作为接口文档,给其他开发人员提供使用代码的相关信息。

    可重用性:将代码逻辑和实现分离可以增加代码的可重用性。头文件中的声明可以被多个源文件引用,这样不同的源文件可以共享相同的函数和类的定义,避免了重复编写相同的代码。这对于开发大型项目或者多人合作开发非常有用,可以提高开发效率。

    编译效率:当头文件被多个源文件包含时,编译器只需编译一次头文件即可,然后在编译不同的源文件时,只需链接相应的目标文件即可。这样可以提高编译效率,减少编译时间。如果将所有代码都写在一个文件中,每次修改都需要重新编译整个文件,非常耗时。

    隐藏实现细节:头文件中只包含函数和类的声明,并不包含实现的细节,这样可以隐藏具体的实现逻辑。只有源文件中包含了实现的代码,其他文件无法直接访问和修改具体的实现,从而保护了代码的安全性和稳定性。

    总结起来,将C++代码分为头文件和源文件可以提高代码的可维护性、可重用性和编译效率,同时也可以隐藏实现细节,保护代码的安全性。这是一种良好的编程实践,尤其适用于大型项目或者多人协作开发的情况下。

    举个栗子

    假设在分离cpp和h文件之前,我们把所有写在cpp中,得到一下文件:

    1. #include
    2. using namespace std;
    3. class Pencil{
    4. public:
    5. void setSize(int size)
    6. {
    7. p_size=size;
    8. }
    9. void inform()
    10. {
    11. cout<<"这是一个铅笔"<
    12. }
    13. int get_size()
    14. {
    15. return p_size;
    16. }
    17. private:
    18. int p_size;
    19. };
    20. class Book{
    21. public:
    22. void setSize(int size)
    23. {
    24. b_size=size;
    25. }
    26. void inform()
    27. {
    28. cout<<"这是一本书"<
    29. }
    30. int get_size()
    31. {
    32. return b_size;
    33. }
    34. private:
    35. int b_size;
    36. };
    37. class SchoolBag{
    38. public:
    39. void set_info(int p_size,int b_size)
    40. {
    41. p.setSize(p_size);
    42. b.setSize(b_size);
    43. }
    44. void show_info()
    45. {
    46. p.inform();cout<<"size="<get_size()<
    47. b.inform();cout<<"size="<get_size()<
    48. }
    49. private:
    50. Pencil p;
    51. Book b;
    52. };
    53. int main()
    54. {
    55. SchoolBag s;
    56. s.set_info(10,100);
    57. s.show_info();
    58. return 0;
    59. }

    分离之后,会得到:

    pencil.h pencil.cpp book.h book.cpp school.h school.cpp main.cpp

    分别写在下面

    pencil.h:

    1. #pragma once
    2. #include
    3. using namespace std;
    4. class Pencil {
    5. public:
    6. void setSize(int size);
    7. void inform();
    8. int get_size();
    9. private:
    10. int p_size;
    11. };

    book.h

    1. #pragma once
    2. #include
    3. using namespace std;
    4. class Book {
    5. public:
    6. void setSize(int size);
    7. void inform();
    8. int get_size();
    9. private:
    10. int b_size;
    11. };

    schoolbag.h

    1. #pragma once
    2. #include "pencil.h"
    3. #include "book.h"
    4. class SchoolBag {
    5. public:
    6. void set_info(int p_size, int b_size);
    7. void show_info();
    8. private:
    9. Pencil p;
    10. Book b;
    11. };

    pencil.cpp

    1. #include "pencil.h"
    2. void Pencil::setSize(int size)
    3. {
    4. p_size = size;
    5. }
    6. void Pencil::inform()
    7. {
    8. cout << "这是一个铅笔" << endl;
    9. }
    10. int Pencil::get_size()
    11. {
    12. return p_size;
    13. }

    book.cpp

    1. #include "book.h"
    2. void Book::setSize(int size)
    3. {
    4. b_size = size;
    5. }
    6. void Book::inform()
    7. {
    8. cout << "这是一本书" << endl;
    9. }
    10. int Book::get_size()
    11. {
    12. return b_size;
    13. }

    schoolbag.cpp

    1. #include "schoolbag.h"
    2. void SchoolBag::set_info(int p_size, int b_size)
    3. {
    4. p.setSize(p_size);
    5. b.setSize(b_size);
    6. }
    7. void SchoolBag::show_info()
    8. {
    9. p.inform();cout << "size=" << p.get_size() << endl;
    10. b.inform();cout << "size=" << b.get_size() << endl;
    11. }

    main.cpp

    1. #include "schoolbag.h"
    2. int main()
    3. {
    4. SchoolBag s;
    5. s.set_info(10, 100);
    6. s.show_info();
    7. return 0;
    8. }

    运行方法

    注意运行的时候一定要把上面的七个文件进行“编译链接”比如放在visual studio里面之后,运行main可以自动实现上述功能。如果运行在dev cpp里面不编译链接,是无法运行的:

  • 相关阅读:
    C++ multimap实践
    软考-访问控制技术原理与应用
    MyCat的入门介绍
    Yakit工具篇:中间人攻击(平替Burp)的相关技巧-03
    Kafka系列之:深入理解Kafka Connect REST API
    【MyBatis源码分析】四、XML解析与核心对象的构建
    ES6 扩展运算符 ...【详解】(含使用场景、实战技巧和范例、实现原理、错误用法)
    【Mysql】查询mysql的版本
    探索在云原生环境中构建的大数据驱动的智能应用程序的成功案例,并分析它们的关键要素。
    linux--发展史与环境
  • 原文地址:https://blog.csdn.net/m0_63222058/article/details/132805596