c++中多文件的组织

参考书目: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{ 3, 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.
时间: 2025-01-12 15:28:19

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

mave 中pom文件基本配置

什么是Pom Pom是项目对象模型(Project Object Model),它是Maven项目中的文件,表示的不仅仅是一堆包含代码的文件.还包含了与开发有关的组织,项目url,项目依赖,以及其他.而且一个project可以仅包含pom.xml Pom 基本设置 <projectxmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance&q

C程序中头文件相互包含精华(转载)

C程序中头文件相互包含精华(网摘小结) 收藏(转自:http://blog.csdn.net/lingyun3429/archive/2010/04/27/5535191.aspx).h中一般放的是同名.c文件中定义的变量.数组.函数的声明,需要让.c外部使用的声明. 1)h文件作用 1 方便开发:包含一些文件需要的共同的常量,结构,类型定义,函数,变量申明: 2 提供接口:对一个软件包来说可以提供一个给外界的接口(例如: stdio.h). 2)h文件里应该有什么 常量,结构,类型定义,函数,

使用VS2010开发Qt程序的4点经验(QT4到QT5的升级,更改sln文件,切换工程使用的Qt库,在VS的Solution Explorer视图中建立文件夹)

导读 相比于Qt Creator,我更喜欢用VS2010来进行开发.虽然启动时间相对较慢,但是VS下强大的快捷键和丰富的插件,以及使用多年的经验,都让我觉得在开发过程中得心应手.其中最重要的一点是,有时候Qt Creator报的错误莫名其妙.要根据提示找到错误根源显得无从下手.而VS的一般错误说明都比较人性化,即便在某些时候无从解决,也可以通过搜索引擎大致定位出错误的源头.下面是在调试网上的一些源代码的时候,积累下来的一点经验,记下来一来备忘,二来也可供后来人参考. The system can

linux中Makefile文件相关内容

第一章.概述什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional(专业)的程序员,makefile还是要懂.这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义.特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力.因为,makefile关系到了整个

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

查看.Net源代码vs版本号以及C#项目中各文件的含义 用记事本打开vs项目的.sln文件. 第2行就是这个源代码包的开发软件vs版本号了 注意了,如果是vs2003的sln文件通常没有这行,可以判断他的第一行的最后一部分文字 :  Format Version 8.00 Format Version 8.00   对应 vs2003 Format Version 9.00   对应  vs2005 Format Version 10.00  对应  vs2008 Format Version

SQL Server中数据库文件的存放方式,文件和文件组 (转载)

简介 在SQL SERVER中,数据库在硬盘上的存储方式和普通文件在Windows中的存储方式没有什么不同,仅仅是几个文件而已.SQL SERVER通过管理逻辑上的文件组的方式来管理文件.理解文件和文件组的概念对于更好的配置数据库来说是最基本的知识. 理解文件和文件组 在SQL SERVER中,通过文件组这个逻辑对象对存放数据的文件进行管理. 先来看一张图: 我们看到的逻辑数据库由一个或者多个文件组构成 而文件组管理着磁盘上的文件.而文件中存放着SQL SERVER的实际数据. 为什么通过文件组

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

我们公司近一年来做了一个CRM系统. 遇到一个问题就是:在插入交流记录的时候速度特别慢.(交流记录数据量大) 后来我们经理采用文件组的方法,将客户交流记录这张表提出来就快很多了 这里有一篇关于文件组的文章: 简介 在SQL SERVER中,数据库在硬盘上的存储方式和普通文件在Windows中的存储方式没有什么不同,仅仅是几个文件而已.SQL SERVER通过管理逻辑上的文件组的方式来管理文件.理解文件和文件组的概念对于更好的配置数据库来说是最基本的知识. 理解文件和文件组 在SQL SERVER

JDK 7中的文件操作的新特性

文件系统综述 一个文件系统在某种媒介(通常是一个或多个硬盘)上存储和组织文件.如今的大多数文件系统都是以树状结构来存储文件.在树的顶端是一个或多个根节点,在根节点一下,是文件和目录(在Windows系统里时文件夹).每个目录可以包含文件或者子目录. 下面这张图表示一个仅包含一个根节点的树形结构.Windows系统支持多个根节点. 文件系统以根节点起始的路径来识别一个文件,例如,上图中的statusReport在Solaris操作系统中的路径为: /home/sally/statusReport

[转载]VC6中的文件后缀

VC文件扩展名 .APS:存放二进制资源的中间文件,VC把当前资源文件转换成二进制格式,并存放在APS文件中,以加快资源装载速度. .BMP:位图资源文件. .BSC:浏览信息文件,由浏览信息维护工具(BSCMAKE)从原始浏览信息文件(.SBR)中生成,BSC文件可以用来在源代码编辑窗口中进行快速定位. .C:用C语言编写的源代码文件. .CLW:ClassWizard生成的用来存放类信息的文件. .CNT:用来定义帮助文件中“Contents”的结构. .CPP或.CXX:用C++语言编写的