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

优势介绍

将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里面不编译链接,是无法运行的:

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值