构造你的函数

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

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

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

# include <iostream>

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

int main() {

    std::cout << distance(, , ) << std::endl;
std::cout << distance(7.0, 2.1, 5.4) << std::endl; return ;
} 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(, , ) << std::endl;
std::cout << distance(7.0, 2.1, 5.4) << std::endl; return ;
}

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(, , ) << std::endl;
std::cout << distance(7.0, 2.1, 5.4) << std::endl; return ;
}

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++ 库的文件,如标准库

C++构造函数和文件组织的更多相关文章

  1. Vue源码探究-源码文件组织

    Vue源码探究-源码文件组织 源码探究基于最新开发分支,当前发布版本为v2.5.17-beta.0 Vue 2.0版本的大整改不仅在于使用功能上的优化和调整,整个代码库也发生了天翻地覆的重组.可见随着 ...

  2. .NET 基础 一步步 一幕幕[面向对象之构造函数、析构函数]

    构造函数.析构函数 构造函数: 语法: //无参的构造函数 [访问修饰符] 函数名() :函数名必须与类名相同. //有参的构造函数 [访问修饰符] 函数名(参数列表):函数名必须与类名相同. 作用: ...

  3. javascript工厂模式和构造函数模式创建对象

    一.工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程(本书后面还将讨论其他设计模式及其在JavaScript 中的实现).考虑到在ECMAScript 中无法创 ...

  4. JS继承之借用构造函数继承和组合继承

    根据少一点套路,多一点真诚这个原则,继续学习. 借用构造函数继承 在解决原型中包含引用类型值所带来问题的过程中,开发人员开始使用一种叫做借用构造函数(constructor stealing)的技术( ...

  5. PHP与JAVA构造函数的区别

    早期的PHP是没有面向对象功能的,但是随着PHP发展,从PHP4开始,也加入了面向对象.PHP的面向对象语法是从JAVA演化而来,很多地方类似,但是又发展出自己的特色.以构造函数来说,PHP4中与类同 ...

  6. C++ 拷贝构造函数和赋值运算符

    本文主要介绍了拷贝构造函数和赋值运算符的区别,以及在什么时候调用拷贝构造函数.什么情况下调用赋值运算符.最后,简单的分析了下深拷贝和浅拷贝的问题. 拷贝构造函数和赋值运算符 在默认情况下(用户没有定义 ...

  7. golang语言构造函数

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

  8. 前端开发:面向对象与javascript中的面向对象实现(二)构造函数与原型

    前端开发:面向对象与javascript中的面向对象实现(二)构造函数与原型 前言(题外话): 有人说拖延症是一个绝症,哎呀治不好了.先不说这是一个每个人都多多少少会有的,也不管它究竟对生活有多么大的 ...

  9. Aop动态生成代理类时支持带参数构造函数

    一.背景 在某些情况下,我们需要植入AOP代码的类并没有默认构造函数.那么此时动态生成的代理类也需要相同签名的构造函数,并且内部调用原始类的构造函数.自己折腾了1晚上没搞定,现在搞定了发出来供大家一起 ...

随机推荐

  1. 读书笔记--Struts 2 in Action 目录

    1.Struts 2:现代Web框架 1.1 web应用程序:快速学习 21.1.1 构建web应用程序 21.1.2 基础技术简介 31.1.3 深入研究 61.2 web应用程序框架 71.2.1 ...

  2. spring四种依赖注入方式(转)

    spring四种依赖注入方式!! 平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提 ...

  3. Docker搭建的MySQL容器出现 "Too many connections 1040" 最大连接数修改完未生效的解决方案

    原文:Docker搭建的MySQL容器出现 "Too many connections 1040" 最大连接数修改完未生效的解决方案 版权声明:本文为博主原创文章,未经博主允许不得 ...

  4. Leetcode572.Subtree of Another Tree另一个树的子树

    给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树.s 的一个子树包括 s 的一个节点和这个节点的所有子孙.s 也可以看做它自身的一棵子树. 示例 1: 给定的树 ...

  5. Leetcode628.Maximum Product of Three Numbers三个数的最大乘积

    给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积. 示例 1: 输入: [1,2,3] 输出: 6 示例 2: 输入: [1,2,3,4] 输出: 24 注意: 给定的整型数组长度 ...

  6. Liferay 7.1发布啦

    下载地址: https://cdn.lfrs.sl/releases.liferay.com/portal/7.1.0-m1/liferay-ce-portal-tomcat-7.1-m1-20180 ...

  7. sublime3安装javascript控制台环境 方法1

    Sublime Text 3    http://www.sublimetext.com/3 node.js        http://nodejs.cn/download 1.安装完成后. 2.打 ...

  8. Hdu 1269 强连通判定

    题目链接 迷宫城堡 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total S ...

  9. 海胜专访--MaxCompute 与大数据查询引擎的技术和故事

    摘要:在2019大数据技术公开课第一季<技术人生专访>中,阿里巴巴云计算平台高级技术专家苑海胜为大家分享了<MaxCompute 与大数据查询引擎的技术和故事>,主要介绍了Ma ...

  10. js中小知识点

    JavaScript 中 typeof 和 instanceof 常用来判断一个变量是否为空,或者是什么类型的.但它们之间还是有区别的: typeof typeof 是一个一元运算,放在一个运算数之前 ...