C++多文件编程

作为一个小白,我对于自己是无语的!菜的一批,写C++应该也有两年了,但是还不知道如何将一个单文件的长、臭项目重构为短、清晰的多文件项目。单文件项目里面十几个函数,看得我整个人都快崩溃了。

一、基本结构

从简单的多文件项目开始吧!通常分为三部分:main.cppaclass.cppaclass.h三个部分:

  • aclass.h
    • 函数原型
    • 使用#define或const定义的符号常量
    • 结构体声明
    • 类声明
    • 模板声明
    • 内联函数
  • aclass.cpp:包含与结构体、模板、类相关的函数代码
  • main.cpp:包含调用与结构体、模板、类相关的函数代码

二、“”<>的区别

  • 包含自定义的头文件时,用双引号“”,编译器首先查找当前工作目录或源代码目录;如果没有找到,则将在标准位置查找。
  • 包含库的头文件时,用尖括号<>,编译器将查找存储标准头文件的主机系统的文件系统中查找。

三、头文件使用ifndefdefineendif的解释

由于在不知情的原因下,有可能将头文件包含多次,基于预处理器编译指令#ifndef(即if not define)可以避免这种情况 。

#ifndef ACLASS_H_
...
#endif

上面这段代码意味着仅当之前没有使用预处理器编译指令#define定义名称ACLASS_H_时,才处理#ifndef#endif之间的语句。

编译器首次遇到该文件时,名称ACLASS_H_没有定义(该名称根据头文件的名字取得,并加上一些下划线,使其在其他地方不太可能被定义),在这种情况下,编译器将查看#ifndef#endif之间的内容;如果在同一个文件中遇到其他包含aclass.h的内容,编译器就知道ACLASS_H_已经被定义了,从而跳到#endif后面的一行上。

四、多文件案例实战

Project
  --- Sources
  ------ coordin.cpp
  ------ main.cpp
  --- Headers
  ------ coordin.h

main.cpp内容如下

#include <iostream>
#include "coordin.h"

using namespace std;

int main()
{
    rect rplace;                    //直角坐标
    polar pplace;                   //极坐标

    cout << "Please Enter the x and y values: " << endl;
    while(cin >> rplace.x >> rplace.y)          //输入直角坐标
    {
        pplace = rect_to_polar(rplace);         //将直角坐标转化为极坐标
        show_polar(pplace);
        cout << "Next two numbers (q to quit): " << endl;
    }
    cout << "Bye." << endl;
    return 0;
}

coordin.cpp内容如下:

#include <iostream>
#include <cmath>
#include "coordin.h"
using namespace std;

polar rect_to_polar(rect xypos)
{

    polar answer;

    answer.distance = sqrt(xypos.x * xypos.x + xypos.y * xypos.y);
    answer.angle = atan2(xypos.y, xypos.x);
    return answer;
}

void show_polar(polar dapos)
{
    const double Rad_to_deg = 57.29577951;

    cout << "distance = " << dapos.distance;
    cout << ", angle = " << dapos.angle * Rad_to_deg;
    cout << "  degrees\n";
}

coordin.h内容如下:

#ifndef COORDIN_H_INCLUDED
#define COORDIN_H_INCLUDED

struct polar
{
    double distance;
    double angle;
};

struct rect
{
    double x;
    double y;
};

polar rect_to_polar(rect xypos);
void show_polar(polar dapos);

#endif // COORDIN_H_INCLUDED

coordin.h中的声明和coordin.cpp函数实现会自动进行对应的链接,这是C++自身的属性功能,.h文件中函数声明,会自动触发编译器进行同名.cpp中对应函数实现的检索,如果没检索,则会报错提示没有具体实现。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值