C++如何实现多文件程序的编译和运行

C++如何实现多文件程序的编译和运行,第1张

vc++6.0实现圆宴州多文件程序:

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

}


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

原文地址: http://outofmemory.cn/yw/12214418.html

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

发表评论

登录后才能评论

评论列表(0条)

保存