隱藏struct具體實現細節

​ 我們知道對於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()進行訪問結構體。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章