构造你的函数

在 main() 上方声明函数,并在 main 下方定义函数 在 main() 上方同时声明并定义函数。

随着 C++ 程序变得越来越复杂,你可能需要将代码分成多个文件。分开保存函数定义和声明有助于分割并组织你的代码。

我们看看函数测验中的这段代码。

# include <iostream>float distance(float velocity, float acceleration, float time_elapsed);int main() {std::cout << distance(3, 4, 5) << std::endl;  std::cout << distance(7.0, 2.1, 5.4) << std::endl;return 0;
}float distance(float velocity, float acceleration, float time_elapsed) {return velocity*time_elapsed + 0.5*acceleration*time_elapsed*time_elapsed;
}

代码被组织成两个文件,而不是像以前的测验一样将所有内容都放到 main.cpp 中。看看下面的代码main.cpp

#include <iostream>float distance(float velocity, float acceleration, float time_elapsed);int main() {std::cout << distance(3, 4, 5) << std::endl;  std::cout << distance(7.0, 2.1, 5.4) << std::endl;return 0;
}

distance.cpp

float distance(float velocity, float acceleration, float time_elapsed) {return velocity*time_elapsed + 0.5*acceleration*time_elapsed*time_elapsed;
}

打开一个终端并导航到包含这两个文件的文件夹。输入以下命令:

g++ main.cpp distance.cpp
./a.out

即可一起编译两个文件,然后执行该程序。

头文件

函数声明

float distance(float velocity, float acceleration, float time_elapsed);

通常也会单独创建一个文件。声明保存在所谓的头文件中,因为头是 main() 函数上方的信息。头文件扩展名通常为 .h 或 .hpp。下面的代码与上面相同,但在头文件中有函数声明。

main.cpp

#include <iostream>
#include "distance.h"int main() {std::cout << distance(3, 4, 5) << std::endl;  std::cout << distance(7.0, 2.1, 5.4) << std::endl;return 0;
}

distance.h

float distance(float velocity, float acceleration, float time_elapsed);

distance.cpp

float distance(float velocity, float acceleration, float time_elapsed) {return velocity*time_elapsed + 0.5*acceleration*time_elapsed*time_elapsed;
}

在main.cpp中多了一行include"distance.h"

现在,我们假设你想在不同的文件中重用你的 distance 函数。你所要做的,就是使用 include 语句在新文件的顶部声明函数:

# include "distance.h"

然后就可以在程序的另一部分使用该函数了。

将代码组织到不同的 .cpp 文件中,可以把声明与实现分离。此外,使用头文件意味着你不必记住如何进行函数声明,因为你可以用简单的语法将其包含在内

要编译代码,只需要编译 .cpp文件而不是 .h 文件即可:

g++ main.cpp distance.cpp

文件命名

命名约定规定,头文件和相关的 cpp 文件需使用相同的名称。因此,很显然,distance.h 包含了 distance.cpp 的头部声明。你还会注意到,函数本身名称为 distance()。因此,函数名、.cpp 文件和 .h 文件都是匹配的。

这些是命名约定。如果你不遵循这些约定,你的 C++代码仍然会被编译;但我们强烈建议你遵循这些约定。

Include 语法

你可能想知道,为什么有两种不同类型的 include 语句:

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

带引号的 include 语句告诉程序在当前目录中查找 distance.h 文件。

> 语法则取决于你的 C++ 环境。通常,环境被设置为查找存储 C++ 库的文件,如标准库

转载于:https://www.cnblogs.com/fuhang/p/9056657.html

C++构造函数和文件组织相关推荐

  1. 派生类参数初始化列表和基类构造函数顺序

    今天被问到了一个问题,随便回了一句,父类还没有构建,怎么能初始化父类的成员. 派生类构造函数的参数初始化列表,为什么不能初始化基类的成员? 例如下面的是不可以的 class Rectangle : p ...

  2. C++ 复制构造函数或者拷贝构造函数

    复制构造函数 是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象. 复制构造函数通常用于: 通过使用另一个同类型的对象来初始化新创建的对象. 复制对象把它作为参数传 ...

  3. C++ 笔记(17)— 类和对象(构造函数、析构函数、拷贝构造函数)

    1. 构造函数 构造函数是一种特殊的函数(方法),在根据类创建对象时被调用.构造函数是一种随着对象创建而自动被调用的函数,它的主要用途是为对象作初始化. 构造函数的名称与类的名称是完全相同的,并且不会 ...

  4. php构造和析构方法,php5构造函数与析构函数实例

    自php5起,有了构造函数与析构函数. 这使得php更富有面向对象的魅力了. 在php4时,构造函数用的是与类同名的函数来进行构造这个动作. 例如: 复制代码 代码示例: /* * myclass.p ...

  5. java super快速生成_为什么当我使用编辑器代码生成器时,eclipse会在构造函数中自动添加一个java super()方法?...

    正如@Kon在他的评论中提到的, Java中的一个空构造函数包含对超类构造函数的隐式调用. 此外,没有明确调用super()的非空构造函数将在顶部具有隐式调用. 离开super()调用是唯一的时候,如 ...

  6. 【C++】何时需要自定义拷贝构造函数和赋值符

    先来说结论:当类中有指针类型成员变量的时候,一定要自定义拷贝构造和赋值运算符 原因:当我们在有指针类成员变量的时候,还是用默认拷贝构造函数(拷贝构造函数执行的时候会调用赋值符),默认赋值为浅拷贝,会导 ...

  7. 对象特性-----拷贝构造函数的调用

    C++中拷贝构造函数调用通常三种情况: ****使用一个已经创建完毕的对象来初始化一个新对象 ****值传递的方式给函数参数传值 ****以值方式返回局部对象 #include<iostream ...

  8. 对象特性-构造函数和析构函数

    基础概念: 构造函数:是一种特殊的方法.主要用来在创建对象时初始化对象,即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中.特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或 ...

  9. C++:构造函数作用及用法

    PS:写在前面 就是构造函数的作用可以这样理解,如果没有构造函数就是类里边只是声明了成员变量,成员函数,还有最后的对象,这样你在对该对象进行初始化赋值时就比较麻烦就得先调用成员函数对成员变量赋值,成员 ...

最新文章

  1. php技术会议总结,【技术产品】总结PHP编程20大效率要点
  2. R语言创建自定义颜色(分类变量与颜色形成稳定映射)实战:设置因子变量(分类变量)到可视化颜色的稳定映射
  3. jvm性能调优 - 10白话年轻代数据晋升老年代规则及老年代回收算法
  4. Ruby与Google 2009编程之夏
  5. SharePoint学习札记[4] — 创建SharePoint站点
  6. LeetCode 第 33 场双周赛(511/3304,前15.5%,第4次全部通过)
  7. 模拟网页行为之实践四
  8. Spring Boot 之 elasticsearch
  9. Python MySQL创建表
  10. leetcode题目:第 k 个数
  11. 诛仙3饮马江南服务器信息,横刀云渺,饮马天河----浅谈云渺天河5S单刷
  12. SD卡无法格式化怎么办?解决方法免费分享
  13. 十个程序员必备的网站推荐和较出名的国外程序员论坛
  14. 原生Js从0开始实现一个链家网地图画圈找房功能
  15. 微信小程序——时间轴的实现
  16. 邮件发送时间怎么修改 python_使用python通过电子邮件发送日期时间
  17. [sphinx]中文语言模型训练
  18. 电视直播加点播,800+直播频道全网影视资源
  19. 【Docker】Docker常用命令
  20. 在linux中如何修改保存gun文件_Linux下文件重命名、创建、删除、修改及保存文件...

热门文章

  1. oracle创建序列seq起始值为1_Oracle修改序列(Sequence)起始值问题
  2. 深度学习:背景建模高斯混合模型
  3. 【直播回放】新手如何入门并学习计算机视觉?
  4. 【pytorch速成】Pytorch图像分类从模型自定义到测试
  5. 中国功率半导体产业销售规模与投资策略研究报告2022版
  6. 全球及中国多非利特行业规模预测与前景运营模式分析报告2022-2027年版
  7. 哪些人员可以申请外国人永久居留证?
  8. chrome添加来自其他网站的扩展程序
  9. 光线追踪技术的理论和实践(面向对象)
  10. 颠覆农业思维-国际农民丰收节贸易会·万祥军:大粮食概念