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