多文件编程初步

在我们平时写一些小程序时,正常都是用的单文件,就是只有一个cpp的文件,但是当我们需要写一些比较大型的项目时,这样的单文件已经不能满足我们的需求了,这是因为,当写一个项目是,代码量都是巨大的,如果只用一个单独的文件来存放这些代码,可想而知,这个文件的篇幅会非常巨大,这也不利于我们对项目进行维护,当我们要调试时工作量会非常大,会非常麻烦。如果是换做多文件,那就大大不一样,我们可以根据代码实现的功能,将其划分成不同的模块,用不同的函数来表示出来,放在不同的文件里,这样的话,代码看上去就很清晰、明了,而已,这也有利于我们对这份代码的维护,我们可以根据不同的功能模块来排查问题。这里强调一点:多文件是指可以有多个.h,多个.cpp的文件,但是,main()函数只能有一个。

下面就具体介绍一下,如何来实现多文件编程吧:

一、最简单的多文件实例:

1.首先,我们需要建立一个工程,如图:



2.建立main.cpp也就是包含main()函数的文件,



3.建立头文件(.h文件),注意,头文件里只放函数的声明,根据模块化的定义,我们吧函数的声明和定义分开放,将函数的声明放在头文件里,将函数的定义放在.cpp文件里,这样的话,调理更加地清晰,



4.建立其他的.cpp文件,必要的话要包含一些头文件;



5.最后就可以组建,运行了,运行结果如图:



总结:这里是举的一个最简单的多文件编程的例子,主要要注意的就是,将函数的声明放在头文件,函数的定义放在.cpp文件里。


二、稍微复杂一点的多文件实例:

这里要注意的一些问题就是:在本文件中,访问其他文件的一些变量或是函数时,要以这样的格式:extern+变量/函数声明;如果要是本文件中的全局变量或是函数不能被其他文件访问,则需要在这些全局变量/函数的声明前加上static,具体的使用方法,大家可以看一下下面的例子:


各个文件源码见下:

fun.h

int fa = 10;//全局变量,可以被外部引用
static int fb = 10;//全局变量,私有,不可被外部引用

void fun1();

void fun2();

person.h

class Person
{
private:
	char *sex, *name;
	int age;

public:
	Person();
	~Person();
	void setSex(char p[]);
	void setName(char q[]);
	void setAge(int a);
	void output();
};

main.h

#include <iostream>
using namespace std;

extern int fa;
extern void fun1();
extern void fun2();
extern class Person
{
private:
	char *sex, *name;
	int age;

public:
	Person();
	~Person();
	void setSex(char p[]);
	void setName(char q[]);
	void setAge(int a);
	void output();
};

fun.cpp

#include <iostream>
#include "fun.h"
using namespace std;

void fun1()
{
	cout << "fun1 " << fa << endl;
}

void fun2()
{
	cout << "fun2 " << fa << endl;
}

person.cpp

#include <iostream>
#include <cstring>
#include "person.h"
using namespace std;
extern int fa;
//extern int fb;

Person::Person() {}

Person::~Person() 
{
	delete []sex;
	delete []name;
}

void Person::setAge(int a)
{
	age = a;
}

void Person::setSex(char p[])
{
	sex = new char[strlen(p)+1];
	strcpy(sex, p);
}

void Person::setName(char q[])
{
	name = new char[strlen(q)+1];
	strcpy(name, q);
}

void Person::output()
{
	cout << "sex:" << sex << " name:" << name << " age:" << age << endl;
	fa = 20;
	cout << "fa = " << fa << endl;
	//cout << "fb = " << fb << endl;
}


main.cpp

#include "main.h"

int main()
{
	int age;
	char strSex[10], strName[10];
	Person person;
	
	cin >> strSex >> strName >> age;
	person.setAge(age);
	person.setName(strName);
	person.setSex(strSex);

	fun1();
	fun2();
	person.output();

	fun1();
	fun2();
	return 0;
}

此图引用自http://www.weixueyuan.net/view/5834.html



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值