将C++代码分为头文件(.h)和源文件(.cpp)的做法有以下几个好处:
模块化和代码组织:将函数和类的声明(包括函数原型、类的成员和属性等)放在头文件中,将函数和类的实现(具体的函数逻辑、成员函数的定义等)放在源文件中。这种分离有助于对代码进行模块化和组织,使代码更加清晰和可维护。头文件可以作为接口文档,给其他开发人员提供使用代码的相关信息。
可重用性:将代码逻辑和实现分离可以增加代码的可重用性。头文件中的声明可以被多个源文件引用,这样不同的源文件可以共享相同的函数和类的定义,避免了重复编写相同的代码。这对于开发大型项目或者多人合作开发非常有用,可以提高开发效率。
编译效率:当头文件被多个源文件包含时,编译器只需编译一次头文件即可,然后在编译不同的源文件时,只需链接相应的目标文件即可。这样可以提高编译效率,减少编译时间。如果将所有代码都写在一个文件中,每次修改都需要重新编译整个文件,非常耗时。
隐藏实现细节:头文件中只包含函数和类的声明,并不包含实现的细节,这样可以隐藏具体的实现逻辑。只有源文件中包含了实现的代码,其他文件无法直接访问和修改具体的实现,从而保护了代码的安全性和稳定性。
总结起来,将C++代码分为头文件和源文件可以提高代码的可维护性、可重用性和编译效率,同时也可以隐藏实现细节,保护代码的安全性。这是一种良好的编程实践,尤其适用于大型项目或者多人协作开发的情况下。
假设在分离cpp和h文件之前,我们把所有写在cpp中,得到一下文件:
- #include
- using namespace std;
-
- class Pencil{
- public:
- void setSize(int size)
- {
- p_size=size;
- }
- void inform()
- {
- cout<<"这是一个铅笔"<
- }
- int get_size()
- {
- return p_size;
- }
- private:
- int p_size;
- };
- class Book{
- public:
- void setSize(int size)
- {
- b_size=size;
- }
- void inform()
- {
- cout<<"这是一本书"<
- }
- int get_size()
- {
- return b_size;
- }
- private:
- int b_size;
- };
- class SchoolBag{
- public:
- void set_info(int p_size,int b_size)
- {
- p.setSize(p_size);
- b.setSize(b_size);
- }
- void show_info()
- {
- p.inform();cout<<"size="<
get_size()< - b.inform();cout<<"size="<
get_size()< - }
- private:
- Pencil p;
- Book b;
- };
- int main()
- {
- SchoolBag s;
- s.set_info(10,100);
- s.show_info();
- return 0;
- }
分离之后,会得到:
pencil.h pencil.cpp book.h book.cpp school.h school.cpp main.cpp
分别写在下面
pencil.h:
- #pragma once
- #include
- using namespace std;
- class Pencil {
- public:
- void setSize(int size);
- void inform();
- int get_size();
- private:
- int p_size;
- };
book.h
- #pragma once
- #include
- using namespace std;
- class Book {
- public:
- void setSize(int size);
- void inform();
- int get_size();
- private:
- int b_size;
- };
schoolbag.h
- #pragma once
- #include "pencil.h"
- #include "book.h"
- class SchoolBag {
- public:
- void set_info(int p_size, int b_size);
- void show_info();
- private:
- Pencil p;
- Book b;
- };
pencil.cpp
- #include "pencil.h"
- void Pencil::setSize(int size)
- {
- p_size = size;
- }
- void Pencil::inform()
- {
- cout << "这是一个铅笔" << endl;
- }
- int Pencil::get_size()
- {
- return p_size;
- }
book.cpp
- #include "book.h"
- void Book::setSize(int size)
- {
- b_size = size;
- }
- void Book::inform()
- {
- cout << "这是一本书" << endl;
- }
- int Book::get_size()
- {
- return b_size;
- }
schoolbag.cpp
- #include "schoolbag.h"
- void SchoolBag::set_info(int p_size, int b_size)
- {
- p.setSize(p_size);
- b.setSize(b_size);
- }
- void SchoolBag::show_info()
- {
- p.inform();cout << "size=" << p.get_size() << endl;
- b.inform();cout << "size=" << b.get_size() << endl;
- }
main.cpp
- #include "schoolbag.h"
-
- int main()
- {
- SchoolBag s;
- s.set_info(10, 100);
- s.show_info();
- return 0;
- }
运行方法
注意运行的时候一定要把上面的七个文件进行“编译链接”比如放在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