头文件中声明函数的原因

头文件中声明函数的原因,第1张

声明和定义的区别

声明(declare)做的事情是,告诉编译器有这么个 符号函数/变量) 存在,让编译器允许后面的代码使用这个符号。

定义(define) 做的事情是,为这个 符号(函数/变量) 分配内存空间/获取其地址,让编译器知道去哪里找这个符号。

2. 为什么要把声明写在头文件中?

为了方便。

这个问题比较好理解。符号的声明并不是必须写在头文件中,写在源文件中也没问题,只要写在使用这个符号之前就行。

为什么把定义写在源文件中?

定义 不能写在头文件中,写在头文件中会出问题(static定义 除外)

如果头文件中有符号(函数/变量)的定义,当这个头文件被多个源文件include时,相当于每个源文件中都定义了同一个符号(函数/变量),这样是不合法的,编译器会报错 duplicate symbol. 符号(函数/变量)可以被多次声明,但不能被多次定义,因为定义会分配内存空间 &&确定符号的地址。

需要特殊说明的是,static类型的符号(函数/变量)定义在源文件中编译器不会报错,因为static意味着符号只会在单个编译单元中可见,因此多个源文件之间不会出现 duplicate symbol 的问题。

综上,最佳实践是:将声明写在头文件中,将定义写在源文件中。

一般为了安全性,只在头文件中进行声明,而不定义,在其它文件中进行定义。给你个例子。因为我学了才一年,所以没法给你说过多的理论,给你两个例子你好好体会把。

简单例子实现输出两个数据。

/*在text。h头文件中进行声明*/

#include<iostream>

using namespace std

void display(int,int)/*使用该函数来实现输出*/

/*在texxt。cpp中进行定义,注意第一行,很重要因为不是c++标准库中的头文件,所以不能用<>,而要用""括起头文件*/

#include "text.h"

void display(int x,int y)

{

cout<<"A="<<x<<"B="<<y<<endl

}

/*在主函数中进行调用函数*/

#include "text.h"

int main()

{

int a,int b

cout<<"please input a &b"<<endl

cin>>a>>b

display(a,b)

return 0

}

下面这个例子实现类的头文件中声明,实现2*3矩阵的加法运算,并进行重载输入输出流。

在/*matrix。h中声明*/

#include <iostream.h>

class Matrix

{

private:

int a[2][3]

public:

Matrix operator + (Matrix&)/*重载加法运算符*/

friend istream&operator>>(istream&,Matrix&)/*重载输入流*/

friend ostream&operator<<(ostream&,Matrix&)/*重载输出流*/

}

/*在matrix。cpp中进行定义*/

#include "matrix.h"

Matrix Matrix::operator +(Matrix&w)

{

Matrix x

for(int i=0i<2i++)

{for(int j=0j<3j++)

x.a[i][j]=this->a[i][j]+w.a[i][j]

}

return x

}

istream&operator>>(istream&w,Matrix&y)

{

for(int i=0i<2i++)

{for(int j=0j<3j++)

cin>>y.a[i][j]

}

return w

}

ostream&operator <<(ostream &x,Matrix&z)

{

for(int i=0i<2i++)

{

for(int j=0j<3j++)

cout<<z.a[i][j]<<" "

cout<<endl

}

return x

}

/*主函数中调用*/

#include "matrix.h"

int main()

{

Matrix c,d,e

cout<<"Please input the first matrix column!"<<endl

cin>>d

cout<<"Please input the second matrix column!"<<endl

cin>>e

cout<<"Here is the plus result of the two matrix columns!"<<endl

c=d+e

cout<<c

return 0

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11435701.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存