参考书目: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

代码片段如下

//Ex8_13.CPP
//main
#include <iostream>
#include"Box.h"
#include"BoxOperators.h" using std::cout;
using std::endl; int main()
{
CBox candy{ 1.5, 1.0, 1.0 };
CBox candyBox{ 1.5, 1.0, 1.0 };
CBox carton{ , 2.0, 1.5 }; int numCandies{ carton / candyBox };
cout << "numCandies is : " << numCandies << endl;
......
......
//Box.h
#pragma once
#include <algorithm>
#include <utility> using std::rel_ops::operator<=;
using std::rel_ops::operator>;
using std::rel_ops::operator>=;
using std::rel_ops::operator!=; class CBox
{
public:
CBox();
~CBox();
explicit CBox(double lv = 1.0, double wv = 1.0, double hv = 1.0);
private:
double m_Length;
double m_Width;
double m_Height;
public:
// less-than operator for CBox objects
bool operator<(const CBox& aBox); double volume() const; bool operator==(const CBox & aBox) const;
CBox operator+(const CBox & aBox); int operator/(const CBox & aBox) const;
};
//Box.cpp
#include "Box.h" CBox::CBox()
{
}
CBox::~CBox()
{
}
CBox::CBox(double lv, double wv , double hv ) :
m_Length{ lv }, m_Width{ wv }, m_Height{ hv }
{
if (m_Height > m_Length)
{
std::swap(m_Height, m_Length);
std::swap(m_Width, m_Height);
}
else if (m_Height > m_Width)
{
std::swap(m_Height, m_Width);
}
}
double CBox::volume() const
{
return m_Length*m_Height*m_Width;
}
// less-than operator for CBox objects
bool CBox::operator<(const CBox& aBox)
{
return volume()<aBox.volume();
} bool CBox::operator==(const CBox & aBox) const
{
return volume() == aBox.volume();
} CBox CBox::operator+(const CBox & aBox)
{
return CBox(std::max(m_Length, aBox.m_Length), std::max(m_Width, aBox.m_Width), m_Height + aBox.m_Height);
} int CBox::operator/(const CBox & aBox) const
{
return volume()/aBox.volume();
}
//BoxOperators.h
//CBox operatoions that dont need to access private members
#pragma once
#include "Box.h" inline bool operator>(const double value, const CBox & aBox)
{
return value > aBox.volume();
}
inline bool operator<(const double value, const CBox & aBox)
{
return value< aBox.volume();
}
inline bool operator>(const CBox & aBox, const double value)
{
return value < aBox.volume();
}
inline bool operator<( const CBox & aBox,const double value)
{
return value > aBox.volume();
}
......
......

总结:

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. 【萌新向】cartographer_ros最新安装指南 2019-12

    首先说明,这篇文章于2019年12月写下,cartographer现在还在不断更新,也许这篇文档内容会失效,但是大体是一样的安装流程. 一.硬件条件 使用平台 x86_64平台 ROS发行版 Indi ...

  2. redis 和 memcached 有什么区别?redis 的线程模型是什么?为什么 redis 单线程却能支撑高并发?

    redis 和 memcached 有啥区别? redis 支持复杂的数据结构 redis 相比 memcached 来说,拥有更多的数据结构,能支持更丰富的数据操作.如果需要缓存能够支持更复杂的结构 ...

  3. net core天马行空系列:SummerBoot,将SpringBoot的先进理念与C#的简洁优雅合二为一

    系列目录 1.net core天马行空系列:原生DI+AOP实现spring boot注解式编程 2.net core天马行空系列: 泛型仓储和声明式事物实现最优雅的crud操作 3.net core ...

  4. $Noip2012/Luogu1083$ 借教室

    $Luogu$ $Sol$ 区间整体加减? 差分+树状数组维护前缀和! 那每给一个人借完教室之后都要判断一下现在合不合法?那复杂度比暴力还不如些... 注意到这里的单调性,假设给前$x$个人借完教室之 ...

  5. $Poj1934\ Trip$ 线性$DP+$搜索

    Luogu Description 爱丽丝和鲍伯想去度假,他们每个人都制定了一个参观城市的清单,该地区正好有26个城市,因此它们被编码为小写字母“a”到“z”.清单上可能重复出现某个城市.因为他们想一 ...

  6. 洛谷P1427 小鱼的数字游戏 题解 递归入门题

    题目链接:https://www.luogu.com.cn/problem/P1427 题目大意: 给你一串数(输入到0为止),倒序输出这些数. 解题思路: 首先这道题目可以用数组存数据,然后输出. ...

  7. samba服务器红帽5.4搭建,亲测可用!!!

    samba服务器搭建 服务器的环境 红帽5.4 vm15 挂载光盘 mount mount -t iso9660 设备目录 /mnt 表示挂载 软件包安装 samba服务器只需安装两个软件包,先找到软 ...

  8. docker概述和基本命令

    命名空间 Docker使用一种称为namespaces提供隔离工作空间的技术来称为容器.当您运行容器时,Docker会为该容器创建一组 名称空间. 这些命名空间提供了一层隔离.容器的每个方面都在一个单 ...

  9. 17.python自定义模块的导入方式

    1.直接用import导入 最后运行main.py可以看到命令行窗口输出了一句:你好,这样就完成了. 2.通过sys模块导入自定义模块的路径path 3.在环境变量中找到自定义模块 这个方法原理就是利 ...

  10. centos7+docker+elasticsearch 安装记录+踩坑

    版本: cenos7 :3.10.0-957.21.3.el7.x86_64  (内核需>=3.10 才可以安装) docker: yum安装版本为1.13.1 elasticsearch: 6 ...