OSX + Xcode + C++ (4)

头文件(.hpp)和源文件(.cpp)

1. 基本概念

每个c++程序通常分为两个文件:保存程序的声明(declaration)的头文件和保存程序的实现(implementation)的源文件。源文件就像我们经常见到的简单程序一样,头文件由三部分组成:

  1. 起始处的版权和版本声明
  2. 预处理块
  3. 全局变量和函数的结构声明

例如下面一段c++头文件代码:

//
//  computeRec.hpp
//  computeArea
//
//  Created by Evelyn on 2018/7/30.
//  Copyright © 2018年 Evelyn. All rights reserved.
//

#ifndef computeRec_hpp
#define computeRec_hpp

#include <stdio.h>
double ComputeRec();
#endif /* computeRec_hpp */

其中最上面用“//”标出的的注释部分就是1,在Xcode环境下,会自动生成;四个“#”标出的部分是预处理,主要目的是为了防止重定义的编译错误,以及包含头文件。唯一一行函数声明中,声明了函数的返回值、函数名以及参数(此例中参数列表为空)。
在编写同名的源文件时,开头必须#include该头文件,并且头文件中声明的函数不必再源文件中全部实现,但是源文件中除了main函数之外的函数最好在头文件中都已经声明过。

2.头文件使用示例

我们知道,自己实现的函数,在调用的地方之前定义实现的,不需要预先声明,否则需要声明。一种比较好的解决方案是把函数的声明都放在头文件中,这样只需要在调用函数的源文件中include该头文件即可。
假设编写一个计算面积的函数,既可以计算圆的面积,也可以计算长方形的面积,由用户选择并给定相应的输入。每个文件如下:

//
//  computeRec.hpp
//  computeArea
//
//  Created by Evelyn on 2018/7/30.
//  Copyright © 2018年 Evelyn. All rights reserved.
//

#ifndef computeRec_hpp
#define computeRec_hpp

#include <stdio.h>
double ComputeRec();
#endif /* computeRec_hpp */
//
//  computeRec.cpp
//  computeArea
//
//  Created by Evelyn on 2018/7/30.
//  Copyright © 2018年 Evelyn. All rights reserved.
//

#include "computeRec.hpp"
#include<iostream>
using namespace std;

double ComputeRec(){
    double length;
    double width;
    cout <<"Please enter length and width: \n";
    cin >> length >> width;
    return length * width;
}
//
//  computeCircle.hpp
//  computeArea
//
//  Created by Evelyn on 2018/7/30.
//  Copyright © 2018年 Evelyn. All rights reserved.
//

#ifndef computeCircle_hpp
#define computeCircle_hpp

#include <stdio.h>
const double pi = 3.14;
double ComputeCircle();
#endif /* computeCircle_hpp */
//
//  computeCircle.cpp
//  computeArea
//
//  Created by Evelyn on 2018/7/30.
//  Copyright © 2018年 Evelyn. All rights reserved.
//

#include "computeCircle.hpp"
#include<iostream>

using namespace std;

double ComputeCircle(){
    double radias;
    cout << "Please enter radias:\n";
    cin >> radias;
    return pi * radias * radias;
}
//
//  main.cpp
//  computeArea
//
//  Created by Evelyn on 2018/7/30.
//  Copyright © 2018年 Evelyn. All rights reserved.
//

#include <iostream>
#include "computeRec.hpp"
#include "computeCircle.hpp"

using namespace std;

int main(int argc, const char * argv[]) {
    // insert code here...
    int choice;
    double area;
    cout << "compute rectangular is 1, circle is 2\n";
    cin >> choice;
    if(choice == 1) area = ComputeRec();
    if(choice == 2) area = ComputeCircle();
    cout << "area is : " << area;
    return 0;
}

我们看到,main函数为了调用函数ComputeRec()ComputeCircle(),只需要include这两个函数对应的头文件即可。

3. 示例程序的Makefile编写

按照程序逻辑自上而下的顺序,我们先写主程序的编译,由于main函数中include另外两个头文件,存在依赖关系,因此主程序需要三个文件共同的汇编代码。main.o单独依赖main.cpp,依次类推,完整的Makefile如下:

computeArea: main.o computeRec.o computeCircle.o
    g++ main.o computeRec.o computeCircle.o -o computeArea
main.o: main.cpp
    g++ -c main.cpp
computeRec.o: computeRec.cpp computeRec.hpp
    g++ -c computeRec.cpp
computeCircle.o: computeCircle.cpp computeCircle.hpp
    g++ -c computeCircle.cpp
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园建设方案旨在通过融合先进技术,如物联网、大数据、人工智能等,实现校园的智能化管理与服务。政策的推动和技术的成熟为智慧校园的发展提供了基础。该方案强调了数据的重要性,提出通过数据的整合、开放和共享,构建产学研资用联动的服务体系,以促进校园的精细化治理。 智慧校园的核心建设任务包括数据标准体系和应用标准体系的建设,以及信息化安全与等级保护的实施。方案提出了一站式服务大厅和移动校园的概念,通过整合校内外资源,实现资源共享平台和产教融合就业平台的建设。此外,校园大脑的构建是实现智慧校园的关键,它涉及到数据中心化、数据资产化和数据业务化,以数据驱动业务自动化和智能化。 技术应用方面,方案提出了物联网平台、5G网络、人工智能平台等新技术的融合应用,以打造多场景融合的智慧校园大脑。这包括智慧教室、智慧实验室、智慧图书馆、智慧党建等多领域的智能化应用,旨在提升教学、科研、管理和服务的效率和质量。 在实施层面,智慧校园建设需要统筹规划和分步实施,确保项目的可行性和有效性。方案提出了主题梳理、场景梳理和数据梳理的方法,以及现有技术支持和项目分级的考虑,以指导智慧校园的建设。 最后,智慧校园建设的成功依赖于开放、协同和融合的组织建设。通过战略咨询、分步实施、生态建设和短板补充,可以构建符合学校特色的生态链,实现智慧校园的长远发展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值