有人可以给我一个公共(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。