编写一个c++工程
c++接触的很少,之前也只是会编写一个简单的cpp文件,但一个工程的实现,往往不仅包括源文件(.cpp后缀文件)一般还有头文件(.h后缀文件)等。一个c++工程中只能有一个main函数,这个函数所在的文件类似于前端中的入口文件,即从main函数开始执行整个工程。即有多个cpp文件,这些文件中也只有一个入口文件
说明,这里可以使用微软的visual studio进行编译运行,但实际在使用的过程中,可能vs反应很慢,所以,我们可以减少vs的一些不必要的功能。比如进入 工具 -> 选项 -> 源代码管理 -> 源代码管理插件 修改为无,另外,也可以在选项中将visual studio定期进行的更新关闭,或者其他一些没有必要的辅助功能都是可以关闭的,以增加运行效率。
基本概念之头文件
头文件就是.h后缀结尾的文件。 如下所示,是一个头文件:
#ifndef __OUTFILE_FRAMEDATA_H__
#define __OUTFILE_FRAMEDATA_H__ #include "outfile.h" class Outfile_framedata : public Outfile
{
private:
FILE *pFile;
int frameCount;
int num_of_dots;
int recordlength; void FWriteInt(FILE* fp, int val);
void FWriteFloat(FILE* fp, double val);
void FWriteString(FILE* fp,const char* str); public:
Outfile_framedata(const char* file, int Nx, int Ny);
~Outfile_framedata(void);
void writeFrame(double **matrix, int Nx, int Ny);
}; #endif
从这个文件中我们可以看出头文件的一些特点:
- 定义了类,包括类的变量和方法,但是方法只是声明,具体语句没有写。
- #ifndef 即if not define的缩写,意思是如果没有定义。
- #define 那么就定义。
- #endif 结束if
- 而上面三个必要语句的作用就是可能会有多个cpp文件使用这个头文件(头文件也有可复用的作用),如果这个头文件没有被编译,就会进行编译,否则,就不需要再编译了,起了防止重复编译的作用。
头文件必须要有下面的几个语句。 且一般要求后面的文件前后有__来作为补充,另外要求英文字母全部大写,比如这个例子中这个.h文件名称为outfile_framedata.h。
基本概念之源文件
源文件是工程中最重要的部分。 一般源文件的开头会引用头文件,如使用#include的方式进行引用 。
c++工程

如上,我们建立了一个project工程(使用visual studio 2013)。 通过源文件上右键,就可以添加源文件,其他类似。
如下所示,这是我们建立的文件。

circle.h源代码如下所示:
#ifndef __CIRCLE_H__
#define __CIRCLE_H__ class Circle
{
private:
double r; // 半径 public:
Circle(); // 构造函数
Circle(double R); // 构造函数
double Area(); // 求面积函数 }; #endif
这个文件中就是定义了Circle这个类以及类中的私有变量和一些函数,而函数具体的语句是不需要写的。
circle.cpp文件如下所示:
#include <iostream>
#include "circle.h" Circle::Circle()
{
this->r = ;
} Circle::Circle(double R)
{
this->r = R;
} double Circle::Area()
{
return 3.14 * r * r;
}
这个文件当中,我们将circle.h中未定义的函数进行了定义包括两个构造函数以及一个计算圆面积的函数。注意文件头要引入circle.h文件。
注意:构造函数的作用是为了初始化工作,而析构函数是为了释放内存空间。一般,一个类可以有多个构造函数,但却只能有一个析构函数。如果类中没有自定义的析构函数,就会调用默认的析构函数完成清理工作,释放堆中分配的内存。
main.cpp文件如下:
#include <iostream>
#include "circle.h"
using namespace std;
void test(double a);
int main()
{
double a = 1.0;
cout << "Please input the circle raduis: " << endl;
cin >> a;
test(a);
Circle c(a);
cout << "the area of the circle is : " << c.Area() << endl;
return ;
}
void test(double a)
{
try
{
if (a < )
{
throw ;
}
}
catch (int)
{
cerr << "the number " << a << " is not fit for this!" << endl;
exit();
}
}
这个文件中,我们同样需要引入头文件 circle.h, 而不需要引入 circle.cpp,这个工程的入口文件就是main.cpp。 注意: 文件中 test是用于处理c++程序异常的。
ctrl + F5可以执行整个工程,最终执行效果如下所示:


ok,这就是一个最为基本的c++工程了。
打开工程文件
选择 文件 - 打开 - 项目/解决方案,然后找到对应文件的 vcxproj 后缀文件即可在 visual studio 中打开此工程。然后ctrl + F5即可运行。
编写一个c++工程的更多相关文章
- Android For JNI(六)——交叉编译,NDK概述以及文件结构,编写自己的第一个JNI工程
Android For JNI(六)--交叉编译,NDK概述以及文件结构,编写自己的第一个JNI工程 终于回到我们的 android了,我们先要配置这个NDK的环境,但是之前,我们还要了解一下基本的术 ...
- Eclipse中一个Maven工程的目录结构
在之前的javaSE开发中,没有很关注Eclipse工程目录下的环境,总是看见一个src就点进去新建一个包再写一个class.以后的日子中也没有机会注意到一个工程到底是怎么组织的这种问题,跟不要说自己 ...
- 编写一个小Servlet程序
1.编写一个java类,此类继承HttpServlet 创建完工程(见上一篇随笔:使用eclipse创建在myeclipse中运行的web工程),在src中新建一个包,包名字叫servlet:再新建一 ...
- android JNI (二) 第一个 android工程
下载NDK 后 它自带有 sample,初学者 可以导入Eclipse 运行 这里 我是自己创建的一个新工程 第一步: 新建一个Android工程 jni_test(名字自取) 第二步:为工程添加 本 ...
- Java入门篇(一)——如何编写一个简单的Java程序
最近准备花费很长一段时间写一些关于Java的从入门到进阶再到项目开发的教程,希望对初学Java的朋友们有所帮助,更快的融入Java的学习之中. 主要内容包括JavaSE.JavaEE的基础知识以及如何 ...
- 1.Maven+SpringMVC+Eclipse软件安装配置,Maven报插件错误,Eclipse总是卡死的解决办法,导入一个maven工程后 一直显示importing maven project
使用Maven+SpringMVC+Eclipse软件安装配置过程中的问题: 1.Eclipse总是卡死的解决办法: 一:内存不足所以会卡死,配置一下eclipse.ini修改这几个值就好了-X ...
- 1、编写一个简单Makefile模板
一.Makefile简介 一个工程中的源文件不计其数,其按类型.功能.模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译, ...
- 十一、eclipse如何创建一个maven工程project
1. 2. 3. 4. 这是刚创建的工程,因为缺少WEB-INF/web.xml,所以项目会报错 5. 6. 再编写一个web.xml文件,项目就正常了,没有报错:后期需要自己添加对应的pom.xml ...
- 第一个FPGA工程—LED流水灯
这一章我们来实现第一个FPGA工程-LED流水灯.我们将通过流水灯例程向大家介绍一次完整的FPGA开发流程,从新建工程,代码设计,综合实现,管脚约束,下载FPGA程序.掌握本章内容,大家就算正式的开始 ...
随机推荐
- C++STL set
set set是一种集合容器,所包含的元素是唯一的,集合中的元素按一定顺序排列,元素插入过程是按排序规则插入,所以不能插入指定位置 set采用红黑树变体的数据结构实现,红黑树属于平衡二叉树,插入和删除 ...
- c# 数据表DataTable给devexpress的gridControl提供数据源
C# DataTable 详解 参考:https://www.cnblogs.com/Sandon/p/5175829.html http://blog.csdn.net/singgel/articl ...
- MIT Molecular Biology 笔记2 DNA的突变和修复
视频 https://www.bilibili.com/video/av7973580?from=search&seid=16993146754254492690 教材 Molecular ...
- spring boot jpa 多条件组合查询带分页的案例
spring data jpa 是一个封装了hebernate的dao框架,用于单表操作特别的方便,当然也支持多表,只不过要写sql.对于单表操作,jpake可以通过各种api进行搞定,下面是一个对一 ...
- css3实现卡牌旋转与物体发光效果
效果演示 http://demo.qpdiy.com/hxw/CSS3/rotate+light.html 物体旋转: 卡牌同一位置放2张图片,通过设置3D动画旋转实现 animation: card ...
- execl 导入
/** * 导入Excel功能 是把execl表中的数据添加到数据表中 */ public function import(){ if (!empty($_FILES)) { $file = re ...
- My first paper is now available online
A two-grid discretization scheme of non-conforming finite elements for transmission eigenvalues
- Python自动化开发 - 生成器、迭代器
本节内容 1.列表生成式 2.生成器 3.迭代器 一.列表生成式 需求:把列表[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]里,每个元素都加1 # 复制版,重新绑定 a = [0, 1, ...
- PhantomJS快速入门-无界面浏览器
https://blog.csdn.net/libsyc/article/details/78199850 PhantomJS快速入门 本文简要介绍了PhantomJS的相关基础知识点,主要包括Pha ...
- 【C#进阶】拥抱Lambda(二)
语言的设计,真的是挺有意思的.第一次看这个代码[1]时,旁人随口了一句"哇,好多实心句号". 当时马上一个想法是--怎么实现的?返回了对象,然后再调用方法?然后就放下了,后来发现, ...