zoukankan      html  css  js  c++  java
  • 编写一个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

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

    • 定义了类,包括类的变量和方法,但是方法只是声明,具体语句没有写。
    • 头文件必须要有下面的几个语句。 且一般要求后面的文件前后有__来作为补充,另外要求英文字母全部大写,比如这个例子中这个.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 = 5;
    }
    
    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 0;
    }
    void test(double a)
    {
        try
        {
            if (a < 0)
            {
                throw 0;
            }
        }
        catch (int)
        {
            cerr << "the number " << a << " is not fit for this!" << endl;
            exit(1);
        }
    }

      这个文件中,我们同样需要引入头文件 circle.h, 而不需要引入 circle.cpp,这个工程的入口文件就是main.cpp。 注意: 文件中 test是用于处理c++程序异常的。 

      ctrl + F5可以执行整个工程,最终执行效果如下所示:

      

      

       

      ok,这就是一个最为基本的c++工程了。 

    打开工程文件

      选择 文件 - 打开 - 项目/解决方案,然后找到对应文件的 vcxproj 后缀文件即可在 visual studio 中打开此工程。然后ctrl + F5即可运行。

      

  • 相关阅读:
    TXSQL:云计算时代数据库核弹头——云+未来峰会开发者专场回顾
    游戏场景下的DDoS风险分析及防护
    一站式机器学习平台TI-ONE是什么?——云+未来峰会开发者专场回顾
    带有Apache Spark的Lambda架构
    攻克数据库核心技术壁垒,实现百万级QPS的高吞吐
    想学大数据?大数据处理的开源框架推荐
    可怕!数据库竟然打破安迪-比尔定律
    什么?云数据库也能C位出道?
    协同过滤的R语言实现及改进
    Android代码规范----按钮单击事件的四种写法
  • 原文地址:https://www.cnblogs.com/zhuzhenwei918/p/8568692.html
Copyright © 2011-2022 走看看