参考书目:visual c++ 入门经典 第七版 Ivor Horton著 第八章

根据书中例子学习使用类的多文件项目。

首先要将类CBox定义成一个连贯的整体,在CBox.H文件中写入相关的类定义,在CBox.cpp 中写入类函数成员的代码。在CBox.cpp中要包含#include “CBox.H” ,而其他的库函数则要写在CBox.h中。

然后我们可以定义多个类的相关文件。

最后把他们共同组织在一个***.cpp中,这个文件里要有main函数,并且包含所有的.h文件 。

例子:

在一个解决方案中有如下文件

Ex8_13.CPP

Box.cpp

Box.h

BoxOperators.h

代码片段如下

  1. //Ex8_13.CPP
  2. //main
  3. #include <iostream>
  4. #include"Box.h"
  5. #include"BoxOperators.h"
  6.  
  7. using std::cout;
  8. using std::endl;
  9.  
  10. int main()
  11. {
  12. CBox candy{ 1.5, 1.0, 1.0 };
  13. CBox candyBox{ 1.5, 1.0, 1.0 };
  14. CBox carton{ , 2.0, 1.5 };
  15.  
  16. int numCandies{ carton / candyBox };
  17. cout << "numCandies is : " << numCandies << endl;
  18. ......
  19. ......
  1. //Box.h
  2. #pragma once
  3. #include <algorithm>
  4. #include <utility>
  5.  
  6. using std::rel_ops::operator<=;
  7. using std::rel_ops::operator>;
  8. using std::rel_ops::operator>=;
  9. using std::rel_ops::operator!=;
  10.  
  11. class CBox
  12. {
  13. public:
  14. CBox();
  15. ~CBox();
  16. explicit CBox(double lv = 1.0, double wv = 1.0, double hv = 1.0);
  17. private:
  18. double m_Length;
  19. double m_Width;
  20. double m_Height;
  21. public:
  22. // less-than operator for CBox objects
  23. bool operator<(const CBox& aBox);
  24.  
  25. double volume() const;
  26.  
  27. bool operator==(const CBox & aBox) const;
  28. CBox operator+(const CBox & aBox);
  29.  
  30. int operator/(const CBox & aBox) const;
  31. };
  1. //Box.cpp
  2. #include "Box.h"
  3.  
  4. CBox::CBox()
  5. {
  6. }
  7. CBox::~CBox()
  8. {
  9. }
  10. CBox::CBox(double lv, double wv , double hv ) :
  11. m_Length{ lv }, m_Width{ wv }, m_Height{ hv }
  12. {
  13. if (m_Height > m_Length)
  14. {
  15. std::swap(m_Height, m_Length);
  16. std::swap(m_Width, m_Height);
  17. }
  18. else if (m_Height > m_Width)
  19. {
  20. std::swap(m_Height, m_Width);
  21. }
  22. }
  23. double CBox::volume() const
  24. {
  25. return m_Length*m_Height*m_Width;
  26. }
  27. // less-than operator for CBox objects
  28. bool CBox::operator<(const CBox& aBox)
  29. {
  30. return volume()<aBox.volume();
  31. }
  32.  
  33. bool CBox::operator==(const CBox & aBox) const
  34. {
  35. return volume() == aBox.volume();
  36. }
  37.  
  38. CBox CBox::operator+(const CBox & aBox)
  39. {
  40. return CBox(std::max(m_Length, aBox.m_Length), std::max(m_Width, aBox.m_Width), m_Height + aBox.m_Height);
  41. }
  42.  
  43. int CBox::operator/(const CBox & aBox) const
  44. {
  45. return volume()/aBox.volume();
  46. }
  1. //BoxOperators.h
  2. //CBox operatoions that dont need to access private members
  3. #pragma once
  4. #include "Box.h"
  5.  
  6. inline bool operator>(const double value, const CBox & aBox)
  7. {
  8. return value > aBox.volume();
  9. }
  10. inline bool operator<(const double value, const CBox & aBox)
  11. {
  12. return value< aBox.volume();
  13. }
  14. inline bool operator>(const CBox & aBox, const double value)
  15. {
  16. return value < aBox.volume();
  17. }
  18. inline bool operator<( const CBox & aBox,const double value)
  19. {
  20. return value > aBox.volume();
  21. }
  22. ......
  23. ......

总结:

C++控制台程序包含了以下基本类型的文件:

  1. 包含库文件#include指令、全局常量和变量、类定义及函数原型的.h文件。换而言之,.h文件中包含了除可执行代码以外的一切。它们还包含内联函数的定义。当程序中有多个类定义的时候,通常将这些类定义放入不同的.h文件中去。
  2. 包含程序可执行代码的.cpp文件,其中还包含可执行代码所需全部定义的#include指令;
  3. 包含main函数 的另一个可执行的**.cpp.

c++中多文件的组织的更多相关文章

  1. linux中Makefile文件相关内容

    第一章.概述什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional(专业)的程序员,m ...

  2. 写给笨蛋徒弟的学习手册(1)——完整C#项目中各个文件含义

    Bin 目录用来存放编译的结果,bin是二进制binrary的英文缩写,因为最初C编译的程序文件都是二进制文件,它有Debug和Release两个版本,分别对应的文件夹为bin/Debug和bin/R ...

  3. 修改win7电脑中所有文件的默认查看方式

    怎么修改win7电脑中所有文件的默认查看方式   如何设置才可以得到如下的效果:比如说打开一个盘符或者一个文件夹,进行设置之后,这个盘符里或者这个文件夹下的所有子文件夹.所有子文件夹里的所有文件都以“ ...

  4. 一个C#解决方案中各文件夹存放了些什么

    在VS2015中"生成"(Build)的过程: Source Code(.cs) -> Compile -> Object File(intermediate file ...

  5. DSP中CMD文件

    DSP中CMD文件 (2012-12-26 20:54:17) 转载▼ 标签: 杂谈 分类: DSP FPGA DSP的存储器的地址范围,CMD是主要是根据那个来编的.CMD 它是用来分配rom和ra ...

  6. SQL Server中数据库文件的存放方式,文件和文件组

    原文地址:http://www.cnblogs.com/CareySon/archive/2011/12/26/2301597.html   SQL Server中数据库文件的存放方式,文件和文件组 ...

  7. SQLServer中数据库文件的存放方式,文件和文件组

    我们公司近一年来做了一个CRM系统. 遇到一个问题就是:在插入交流记录的时候速度特别慢.(交流记录数据量大) 后来我们经理采用文件组的方法,将客户交流记录这张表提出来就快很多了 这里有一篇关于文件组的 ...

  8. 如何查看.Net源代码vs版本号以及C#项目中各文件的含义

    查看.Net源代码vs版本号以及C#项目中各文件的含义 用记事本打开vs项目的.sln文件. 第2行就是这个源代码包的开发软件vs版本号了 注意了,如果是vs2003的sln文件通常没有这行,可以判断 ...

  9. (转载)QT中PRO文件写法的详细介绍,很有用,很重要!

    版权声明:本文为博主原创文章,未经博主允许不得转载. 在QT中,有一个工具qmake可以生成一个makefile文件,它是由.pro文件生成而来的,.pro文件的写法如下: 1. 注释从“#”开始,到 ...

随机推荐

  1. AutoCad 二次开发 Jig操作之墙块的拖动

    测试结果: 主要思路:选择一段多段线,使用封装的jig类进行实时拖动,其原理就是在拖动的时候,确定被拖动的边,我是选择离输入第一个点最近的边作为拖动边,有了这条边,就能确定需要实时更改的点了,然后当鼠 ...

  2. 洛谷P1147 连续自然数和 题解 枚举

    题目链接:https://www.luogu.com.cn/problem/P1147 题目大意: 给你一个数 \(M\) ,求有多少对连续自然数对之和为 \(M\),输出这列连续自然数对的首项和末项 ...

  3. 1035 插入与归并 (25 分)C语言

    根据维基百科的定义: 插入排序是迭代算法,逐一获得输入数据,逐步产生有序的输出序列.每步迭代中,算法从输入序列中取出一元素,将之插入有序序列中正确的位置.如此迭代直到全部元素有序. 归并排序进行如下迭 ...

  4. angular.foreach 循环方法

    angular循环给一个 angular监听的变量复值时.最好还是用angular自带的循环方法.“angular.foreach” 尽量避免代码的冲突,最好不要jq angular 混用 var o ...

  5. javaScript类型和对象

    javaScript基本数据类型 Undefined: Null: Boolean: String: Number: Symbol: Object. 注意 JavaScript 的代码 undefin ...

  6. matlab写入excel数据

    使用xlswrite 可以help xlswrite查看用法 xlswrite(filename,A)xlswrite(filename,A,sheet)xlswrite(filename,A,xlR ...

  7. 【Java基础总结】数据库编程

    MySQL数据库查询 import java.sql.*; public class JdbcDemo1{ public static void main(String[] args){ try{ / ...

  8. echart两组柱状图对比时,不同类型根据各类型的最大值为基准进行展示

    项目中遇到的问题:因为数据太小,箭头的地方展示不出来,这时的两组对比数据是根据一个最大值为基准进行渲染的.但我们想实现不同类型的对比根据不同的基准值渲染. 理想效果如下图: 实现代码: option ...

  9. [C++]最小生成树

    1. 最小生成树定义 树是指没有环路的图,生成树就是指一个图上面删除一些边,使它没有环路. 最小生成树就是指生成树中边权之和最小的那一种. 上图的最小生成树就是这样: 2. Prim 算法 2.1. ...

  10. Maven 基础(一) | 使用 Maven 的正确姿势

    一.什么是 Maven? Maven 是一个项目管理工具,它的本质是一个项目对象模型(POM),体现在配置中就是我们常见的 pom.xml 文件,而这个 pom 文件就是 Maven 的核心,它管理了 ...