简单C++工程架构

来源:互联网 发布:如何查看电脑的端口号 编辑:程序博客网 时间:2024/06/16 12:18

简单C++工程架构

(在这里万分感谢万老师帮我打下的初步架构基础)

1.     项目结构


PlayAviVideo工程的整体目录结构就是这张图所显示的,这次用到的主要是头文件和源文件。头文件夹中放头文件定义,源文件中放源代码文件,其中main.cpp文件中是入口函数main,以及main函数对其他功能函数的调用。其他的cpp源文件是对头文件中声明函数的实现。

2.     头文件

头文件夹里包括一个头文件head.h,贴上代码

#ifndef HEAD_H#define HEAD_H#include "highgui.h"//1.播放一个视频int playAviVideo();//2.播放缩放后的视频int playScaleVideo();#endif

头文件中包括一个#ifndef组合,一个头文件的引用(#include"highgui.h")以及两个函数声明(int playAviVideo();int playScaleVideo();)。

2.1 #Ifndef组合:使用方式如下:

#ifndef 标识符

#define 标识符

内容

#endif

组合用于头文件中,防止当前头文件被重复引用,重复编译。举个栗子,

头文件a

#include <iostream>using namespace std;

头文件b

#include "a.h"#include <string>using namespace std;

源文件Demo.cpp

#include "a.h"#include "b.h"int main() {return 0;}

a.h引用了iostream头文件

b,h引用了a.h和string头文件

Demo.cpp引用了a和b两个头文件,然而头文件b中已经引用了头文件a(#include“a.h”),所以,此时,a头文件中的内容就被引用了两次。

代码量大的时候非常容易犯这种错误,那要如何避免这种情况呢?#ifndef!

#ifndef A_H

#define A_H

头文件内容

#endif

 

在ifndef结构中,标识符为自定义的一个符号,一般情况用当前头文件名的大写形式以示区分,比如a.h中标识符为A_H。如果当前头文件是第一次被编译,A_H肯定是没有被定义过的(#ifndef A_H),条件成立,那A_H则被定义一次(#define A_H),编译头文件内容,#endif与#ifndef对应,表示if结束;如果当前头文件已经被编译过,条件不成立,直接endif结束,不再编译头文件中的内容。

这样,就可以达到防止重复编译的目的。

2.2 #include

引入程序中需要用到的头文件

2.3 int playAviVideo();

       头文件中预先声明函数,其定义根据功能不同放在不同源文件中,如果这里不声明,在main函数中引用时会报错—“无法识别的标识符”,因为main函数找不到playAviVideo函数在哪里。

3.     源文件-main.cpp

#include "head.h"int main() {//1.播放一个视频playAviVideo();//2.缩放视频后播放playScaleVideo();}

入口函数,引用自定义的head.h头文件,调用的playAviVideo和playScaleVideo函数在head.h中声明过,因此main函数可以找到其具体的函数定义。

4.     源文件-其他

以playAviVideo.cpp为例,在这个源文件中引用了head头文件,实现了head头文件中声明的int playAviVideo()函数定义,main函数执行时便可以到这个文件中找到playAviVideo函数的具体定义。

#include "head.h"#include <iostream>using namespace std;int playAviVideo() {cout << "playAviVideo"<<endl;return 0;}



0 0
原创粉丝点击