具有类的库如何工作?

use*_*611 4 c++ libraries

在学校学习C++时,我们从未真正谈过如何建立图书馆,所以对我的基本理解感到遗憾.从我在网上看到的,似乎一个库只是已编译的代码集合,然后有一个.h文件列出了该库中可访问的函数.

例如,当我#include <cmath>现在可以调用sin(x)而无需访问cmath代码来编译它.我的问题是,这是否适用于包含数据的类.

所以我可以创建一个库

//AccumulatorLibrary.h
class Accumulator
{
public:
    int num;
    int increment() {num++};
    void otherFunctions(); //otherFunctions defined in the .lib file
}
Run Code Online (Sandbox Code Playgroud)

然后打电话给它

//Main
#include "AccumulatorLibrary.h"
#include <stdio>
int main()
{
    Accumulator A(0); //initalize num to 0
    Accumulator B(7); //initalize num to 7
    cout<<A.increment;
    cout<<B.increment;
    cout<<A.increment;
}
Run Code Online (Sandbox Code Playgroud)

并获得输出1 8 2

总之,如果我弄清楚如何将一堆类放入库文件中,我可以访问我想要的任何数据,只要该数据在.h文件中具有访问功能吗?

或者一个更基本的问题,做一个.h.lib文件的工作方式与普通的c ++代码完全相同,只是在你使用它时不需要编译,而且你无法访问.lib文件中的代码?

小智 5

从我在网上看到的,似乎一个库只是已编译的代码集合,然后有一个.h文件列出了该库中可访问的函数.

正确.

我的问题是,这是否适用于包含数据的类.

确实如此.许多C++库公开类并在库中预编译其代码.

或者更基本的问题,.h和.lib文件的工作方式与常规c ++代码完全相同,只是在使用它时不必编译它...

等等..h文件仍然包含C++代码(声明,有时甚至是内联实现)..lib文件是动态链接库.它们是C++源文件的编译(和链接)的结果.

...并且您无权访问.lib文件中的代码?

您可以访问它:使用反汇编程序打开它.它不再是C++了.