有人可以给我一个公共(public)和私有(private)头文件如何工作的例子吗?我已经在网上进行了一些阅读,但似乎找不到包含示例代码的有用信息。有人建议我使用私有(private)头将代码的公共(public)部分和私有(private)部分分开,以创建静态库。阅读一番后,我对它的工作原理有了一个大致的了解,但真的很感谢一个很好的例子,让我入门。具体来说,我不太了解的是如何将接口(interface)函数放在我的公共(public)头文件中,以及如何将私有(private)变量/函数放在我的私有(private)头文件中?谢谢!

编辑:

也许我的措词不对,但是我的意思是,例如,我有myMath.h和myMath.cpp,而myMath.h有:

class myMath{
public:
    void initialise(double _a, double _b);
    double add();
    double subtract();

private:
    double a;
    double b;
};

myMath.cpp具有功能的实现。如何使myMath.h仅具有三个公用函数,并在另一个文件(例如myMath_i.h)中定义私有(private)变量,并且这三个文件的方式是在创建静态库之后,用户只需要myMath.h。这也意味着myMath.h不能#include myMath_i.h。所以像这样:

myMath.h:
class myMath{
public:
    void initialise(double _a, double _b);
    double add();
    double subtract();
}

和myMath_i.h:
class myMath{
private:
    double a;
    double b;
}

当然不可能,因为那样的话我将重新定义类myMath ...

最佳答案

您有两个头文件MyClass.h和MyClass_p.h,以及一个源文件:MyClass.cpp。

让我们看一下其中的内容:

MyClass_p.h:

// Header Guard Here
class MyClassPrivate
{
public:
    int a;
    bool b;
    //more data members;
}

MyClass.h:
// Header Guard Here
class MyClassPrivate;
class MyClass
{
public:
    MyClass();
    ~MyClass();
    void method1();
    int method2();
private:
    MyClassPrivate* mData;
}

MyClass.cpp:
#include "MyClass.h"
#include "MyClass_p.h"

MyClass::MyClass()
{
    mData = new MyClassPrivate();
}

MyClass::~MyClass()
{
    delete mData;
}

void MyClass::method1()
{
    //do stuff
}

int MyClass::method2()
{
    return stuff;
}

将您的数据保存在MyClassPrivate中并分发MyClass.h。

10-06 15:07