我們知道對於struct,其所有的成員默認情況下是所有對外可見的,即爲public屬性。但是有時候爲了提高程序的封裝性,我們需要將struct的內容細節隱藏起來,怎麼做呢?可以使用下面這種做法達到目的。
// a.h
typedef struct A At;
class Test {
public:
Test(int a);
int Get();
At* _a;
};
// a.cpp
#include "a.h"
typedef struct A {
int a;
} At;
Test::Test(int a_) {
_a = new At;
_a->a = a_;
}
int Test::Get() {
return _a->a;
}
// main.cpp
#include "a.h"
#include <iostream>
int main() {
Test t(10);
std::cout << t.Get() << std::endl;
}
上述的實現方式歸根結底就是將實現定義在cpp中,而.h中只做聲明。這樣外部直接使用struct的成員的時候會報錯是不完整的類型,所以此時就達到了隱藏的目的,強制我們通過類中的預定義函數Get()進行訪問結構體。