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

  从这个文件中我们可以看出头文件的一些特点:

  • 定义了类,包括类的变量和方法,但是方法只是声明,具体语句没有写。
  • 头文件必须要有下面的几个语句。 且一般要求后面的文件前后有__来作为补充,另外要求英文字母全部大写,比如这个例子中这个.h文件名称为outfile_framedata.h。

    • #ifndef 即if not define的缩写,意思是如果没有定义。
    • #define 那么就定义。
    • #endif 结束if
  • 而上面三个必要语句的作用就是可能会有多个cpp文件使用这个头文件(头文件也有可复用的作用),如果这个头文件没有被编译,就会进行编译,否则,就不需要再编译了,起了防止重复编译的作用。

基本概念之源文件

源文件是工程中最重要的部分。 一般源文件的开头会引用头文件,如使用#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++工程的更多相关文章

  1. Android For JNI(六)——交叉编译,NDK概述以及文件结构,编写自己的第一个JNI工程

    Android For JNI(六)--交叉编译,NDK概述以及文件结构,编写自己的第一个JNI工程 终于回到我们的 android了,我们先要配置这个NDK的环境,但是之前,我们还要了解一下基本的术 ...

  2. Eclipse中一个Maven工程的目录结构

    在之前的javaSE开发中,没有很关注Eclipse工程目录下的环境,总是看见一个src就点进去新建一个包再写一个class.以后的日子中也没有机会注意到一个工程到底是怎么组织的这种问题,跟不要说自己 ...

  3. 编写一个小Servlet程序

    1.编写一个java类,此类继承HttpServlet 创建完工程(见上一篇随笔:使用eclipse创建在myeclipse中运行的web工程),在src中新建一个包,包名字叫servlet:再新建一 ...

  4. android JNI (二) 第一个 android工程

    下载NDK 后 它自带有 sample,初学者 可以导入Eclipse 运行 这里 我是自己创建的一个新工程 第一步: 新建一个Android工程 jni_test(名字自取) 第二步:为工程添加 本 ...

  5. Java入门篇(一)——如何编写一个简单的Java程序

    最近准备花费很长一段时间写一些关于Java的从入门到进阶再到项目开发的教程,希望对初学Java的朋友们有所帮助,更快的融入Java的学习之中. 主要内容包括JavaSE.JavaEE的基础知识以及如何 ...

  6. 1.Maven+SpringMVC+Eclipse软件安装配置,Maven报插件错误,Eclipse总是卡死的解决办法,导入一个maven工程后 一直显示importing maven project

     使用Maven+SpringMVC+Eclipse软件安装配置过程中的问题: 1.Eclipse总是卡死的解决办法: 一:内存不足所以会卡死,配置一下eclipse.ini修改这几个值就好了-X ...

  7. 1、编写一个简单Makefile模板

    一.Makefile简介 一个工程中的源文件不计其数,其按类型.功能.模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译, ...

  8. 十一、eclipse如何创建一个maven工程project

    1. 2. 3. 4. 这是刚创建的工程,因为缺少WEB-INF/web.xml,所以项目会报错 5. 6. 再编写一个web.xml文件,项目就正常了,没有报错:后期需要自己添加对应的pom.xml ...

  9. 第一个FPGA工程—LED流水灯

    这一章我们来实现第一个FPGA工程-LED流水灯.我们将通过流水灯例程向大家介绍一次完整的FPGA开发流程,从新建工程,代码设计,综合实现,管脚约束,下载FPGA程序.掌握本章内容,大家就算正式的开始 ...

随机推荐

  1. nginx location配置和rewrite写法

    location = / { # 精确匹配 / ,主机名后面不能带任何字符串 [ configuration A ] } location / { # 因为所有的地址都以 / 开头,所以这条规则将匹配 ...

  2. php mysqli 链接数据库 CURD 增改查删

    <?php function println($msg) { echo "<br>"; echo $msg; } $mysql_server_name = &qu ...

  3. 多表更新时碰到的 ERROR 1292 (22007)隐式转换错误

    表结构如下: Create Table: CREATE TABLE `test_t2` ( `id` int(11) NOT NULL AUTO_INCREMENT, `customer_no` va ...

  4. Linux磁盘满问题分析

    线上一台Linux服务器最近经常磁盘根分区满告警,但不是普通的日志文件或数据文件过多过大,现象如下: 1)执行“df -h”查看各分区空间的使用情况[root@XEN64 /]# df -hFiles ...

  5. 1.7.6方法stop()与java.lang.threadDeath异常

    调用stop方法时会抛出java.lang.ThreadDeath异常,但一般情况下这个异常不需要显示的捕捉 package com.cky.thread; /** * Created by edis ...

  6. kepware http接口 java语言开发

    读取某变量的值(OK HTTP OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .u ...

  7. Beta阶段第六篇Scrum冲刺博客-Day5

    1.站立式会议 提供当天站立式会议照片一张 2.每个人的工作 (有work item 的ID),并将其记录在码云项目管理中: 昨天已完成的工作. 张晨晨:完善收藏功能 郭琪容:收藏功能的实现 吴玲:完 ...

  8. execl 导入

    /** * 导入Excel功能   是把execl表中的数据添加到数据表中 */ public function import(){ if (!empty($_FILES)) { $file = re ...

  9. ES基本查询

    数据准备 # 创建索引PUT /lib1{  "settings": {    "number_of_shards": 5   , "number_o ...

  10. yum-本地源配置(CentOS7)

    服务器版本查看:# cat /etc/redhat-release CentOS Linux release 7.3.1611 (Core) 一.挂载ISO文件: 1.ISO镜像下载网站:网易镜像: ...