1、必须创建工程,并将文件加入同一工程下;2、必须有自定义头文件(.h)将多个源文橘蔽件(.c/.cpp)关联起来,并将函数定义放在头文件中。
多个源文件需要在这个祥慎窗口创建:
创建完毕后如图:
多个c文件的作用在于将不同功能的代码分开来实现,这样便于代码重用、代码编译和代码管理。一个程序中,只能有一个main函数,这是整个程序的起点和入口。如果其他人也实现了该函数,则必须要重新命名,然后在唯一的main函数中统一调用。
多个c文件的合并并没有顺序要求,任何一个都可以先编译或者后编译。
extern表示导出,可以用于函数和变量。用于函数的时候,表示这是一个外部函数,用于变量的时候,表示这是一个外部变量。
如果使用一个c文件,多个h文件,则会导致改动代码任何一个地方,都要重新编译所有的文件,效率上非常不划算。而使用多个c文件,当代码发绝宽丛生变更的时候,并樱仅仅相关的c文件代码需要重新编译,其他代码则可以保持不变,不用参与编译。
函数中的局部变量无法在函数外部调巧虚用,只能通过参数传递的方式传递给第三方函数。因为局部变量是出于栈上面的,栈会随着函数调用完毕的时候被系统回收。
把一个源程序分成三个文件,一般情况包含《文件名》.h头文件用于实现函数的袜指声明,函数文件<文件名>.cpp,主函数文件头袭前文件和函数文件用#include“文件名.h(.cpp)开头声明!下边例子头文件head.h是类定义头文件,head.cpp是类实现文拍好清件4-4.cpp是主函数文件
//head.h
class Point{
public:
Point(int xx=0,int yy=0){
x=xx
y=yy
}
Point(Point &p)
int getX(){return x}
int getY(){return y}
private:
int x,y
}class Line{
public:
Line(Point xp1,Point xp2)
Line(Line &l)
double getLen(){return len}
private:
Point p1,p2
double len
}
//head.app
#include"head.h"
#include<iostream>
#include<cmath>
using namespace std
Point::Point(Point &p){
x=p.x
y=p.y
cout<<"Calling the copy constructor of Point"<<endl
}
Line::Line(Point xp1,Point xp2):p1(xp1),p2(xp2){
cout<<"Calling consturctor of Line"<<endl
double x=static_cast<double>(p1.getX()-p2.getX())
double y=static_cast<double>(p1.getY()-p2.getY())
len=sqrt(x*x+y*y)
}
Line::Line (Line &l):p1(l.p1),p2(l.p2){
cout<<"Calling the copy constructor of Line"<<endl
len=l.len
}
//4_4.app
#include "head.h"
#include <iostream>
using namespace std
int main(){
Point myp1(1,1),myp2(4,5)
Line line(myp1,myp2)
Line line2(line)
cout<<"The length of the line2 is:"
cout<<line.getLen()<<endl
cout<<"The length of the line2 is:"
cout<<line2.getLen()<<endl
return 0
}
综合到一块如下:
#include <iostream>
using namespace std
class Point{
public:
Point(int xx=0,int yy=0){
x=xx
y=yy
}
Point(Point &p)
int getX(){return x}
int getY(){return y}
private:
int x,y
}class Line{
public:
Line(Point xp1,Point xp2)
Line(Line &l)
double getLen(){return len}
private:
Point p1,p2
double len
}using namespace std
Point::Point(Point &p){
x=p.x
y=p.y
cout<<"Calling the copy constructor of Point"<<endl
}
Line::Line(Point xp1,Point xp2):p1(xp1),p2(xp2){
cout<<"Calling consturctor of Line"<<endl
double x=static_cast<double>(p1.getX()-p2.getX())
double y=static_cast<double>(p1.getY()-p2.getY())
len=sqrt(x*x+y*y)
}
Line::Line (Line &l):p1(l.p1),p2(l.p2){
cout<<"Calling the copy constructor of Line"<<endl
len=l.len
}
int main(){
Point myp1(1,1),myp2(4,5)
Line line(myp1,myp2)
Line line2(line)
cout<<"The length of the line2 is:"
cout<<line.getLen()<<endl
cout<<"The length of the line2 is:"
cout<<line2.getLen()<<endl
return 0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)